Flutter iOS - 不请求相机许可

Tan*_*nuj 5 flutter flutter-ios

在此处实现了相机包中的示例:

https://pub.dev/packages/camera/example

在物理设备(运行 iOS 16)上进行测试时,该应用程序构建并运行良好,但手机不要求任何访问摄像头或麦克风的权限。

以下代码已添加到ios/Runner/Info.plist

<key>NSCameraUsageDescription</key>
<string>Testing the Camera integration.</string>
<key>NSMicrophoneUsageDescription</key>
<string>To add sounds to the videos you record.</string>
Run Code Online (Sandbox Code Playgroud)

iOS Deployment Target设置为iOS 11.0

注意:我可以向您保证该应用程序尚未被授予这些权限,因为:

  1. 它没有显示在应用程序设置中
  2. 该应用程序未在“设置”>“隐私和安全”>“相机”中列出

我错过了什么吗?

更新:

创建了一个干净的项目来测试此示例代码,实现了permission_handler来强制权限(基于@cenk-yagmur的建议)。

现在出现权限窗口,但是示例代码仍然不起作用。

这让我相信它是:

  1. 相机包不适用于iOS16
  2. 示例代码是错误的。

我更倾向于 2。将进行自定义集成并测试是否可以解决问题。

ras*_*maz 7

您可以将此代码添加到 PodFile 中并重试。

不要忘记 clean、pub get 和 pod install。

请记住,只需关闭您正在使用的属性的注释行并将值设置为 1。

   post_install do |installer|
      installer.pods_project.targets.each do |target|
        flutter_additional_ios_build_settings(target)
        target.build_configurations.each do |config|
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
                   '$(inherited)',
    
                   ## dart: PermissionGroup.calendar
                   ##'PERMISSION_EVENTS=1',
    
                   ## dart: PermissionGroup.reminders
                   #'PERMISSION_REMINDERS=0',
    
                   ## dart: PermissionGroup.contacts
                   # 'PERMISSION_CONTACTS=0',
    
                   ## dart: PermissionGroup.camera
                   'PERMISSION_CAMERA=1',
    
                   ## dart: PermissionGroup.microphone
                   'PERMISSION_MICROPHONE=1',
    
                   ## dart: PermissionGroup.speech
                   #'PERMISSION_SPEECH_RECOGNIZER=0'
    
                   ## dart: PermissionGroup.photos
                   'PERMISSION_PHOTOS=1',
    
                   ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
                   'PERMISSION_LOCATION=1',
    
                   ## dart: PermissionGroup.notification
                   'PERMISSION_NOTIFICATIONS=1',
    
                   ## dart: PermissionGroup.appTrackingTransparency
                    ##'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
    
                   ## dart: PermissionGroup.mediaLibrary
                   ##'PERMISSION_MEDIA_LIBRARY=1'
    
                   ## dart: PermissionGroup.sensors
                   #'PERMISSION_SENSORS=0'
                 ]
        end
      end
    end
Run Code Online (Sandbox Code Playgroud)

我的照片和相机权限功能代码:

Future<bool?> _checkPermission(BuildContext context) async {
  if (Platform.isAndroid) {
    Map<Permission, PermissionStatus> statues = await [Permission.camera, Permission.photos].request();
    PermissionStatus? statusCamera = statues[Permission.camera];

    PermissionStatus? statusPhotos = statues[Permission.photos];
    bool isGranted = statusCamera == PermissionStatus.granted && statusPhotos == PermissionStatus.granted;
    if (isGranted) {
      return true;
    }
    bool isPermanentlyDenied = statusCamera == PermissionStatus.permanentlyDenied || statusPhotos == PermissionStatus.permanentlyDenied;
    if (isPermanentlyDenied) {
      return false;
    }
  } else {
    Map<Permission, PermissionStatus> statues = await [Permission.camera, Permission.storage, Permission.photos].request();
    PermissionStatus? statusCamera = statues[Permission.camera];
    PermissionStatus? statusStorage = statues[Permission.storage];
    PermissionStatus? statusPhotos = statues[Permission.photos];
    bool isGranted = statusCamera == PermissionStatus.granted && statusStorage == PermissionStatus.granted && statusPhotos == PermissionStatus.granted;
    if (isGranted) {
      return true;
    }
    bool isPermanentlyDenied = statusCamera == PermissionStatus.permanentlyDenied || statusStorage == PermissionStatus.permanentlyDenied || statusPhotos == PermissionStatus.permanentlyDenied;
    if (isPermanentlyDenied) {
      return false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


pow*_*rus -1

如果系统没有请求比之前授予的权限