bikram
bikram

Reputation: 7985

Flutter: Activity recognition/Motion and fitness permission popup not shown in iOS platform

In Flutter, I am not able to ask the user for motion and fitness permission in iOS platform. I am using this library for permission handling and I am using following code

Permission.activityRecognition.request()

// Android
// Asks for permission

// iOS
// No prompt

Upvotes: 2

Views: 2855

Answers (2)

Tughra
Tughra

Reputation: 146

First copy and past below code into your podfile. Than set 'PERMISSION_SENSORS=1', if you dont want use another permission you can delete or set it =0 (exp 'PERMISSION_CAMERA=0', ).

    post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
          # You can remove unused permissions here
          # e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
            ## dart: PermissionGroup.calendar

            ## dart: PermissionGroup.reminders

            ## dart: PermissionGroup.contacts

            ## dart: PermissionGroup.camera
            'PERMISSION_CAMERA=1',
            ## dart: PermissionGroup.microphone
            'PERMISSION_MICROPHONE=1',
            ## dart: PermissionGroup.speech
            'PERMISSION_SPEECH_RECOGNIZER=1',
            ## dart: PermissionGroup.photos
            'PERMISSION_PHOTOS=1',
            ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]

            ## dart: PermissionGroup.notification

            ## dart: PermissionGroup.mediaLibrary
            'PERMISSION_MEDIA_LIBRARY=1',
            ## dart: PermissionGroup.sensors

            ## dart: PermissionGroup.bluetooth

            ## dart: PermissionGroup.appTrackingTransparency
            'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
            ## dart: PermissionGroup.criticalAlerts
            'PERMISSION_SENSORS=1'
          ]
        end
  end
end

Than add this into Info.plist file

<key>NSMotionUsageDescription</key>
    <string>This application tracks your steps</string>

Finally use permission_handler plugin into your project and add this code where you want to ask permission.

 Permission.sensors.request().then((value) => print(value));

Upvotes: 1

bikram
bikram

Reputation: 7985

The workaround I found was to use Permission.sensors instead of Permission.activityRecognition for iOS platform. The code goes like this:-

Permission getMotionPermission() {
    if(Platform.isAndroid /** Also check if SDK >= 29 **/){
         return Permission.activityRecognition;   
    } else if(Platform.isIOS) {
         return Permission.sensors;
    }
}

// ask for permission
Permission motionPermission = getMotionPermission();
motionPermission?.request();

Upvotes: 2

Related Questions