当前位置: 首页 > 知识库问答 >
问题:

颤动 ios 照片权限始终返回永久拒绝的权限

戚育
2023-03-14

我正在使用flutter为ios和android创建一个应用程序。我需要对ios和android的照片storagepermission来访问照片以更新用户个人资料图片。我使用permission_handler包请求权限。这在Android系统中效果很好,但在ios中效果不佳。

<key>NSPhotoLibraryUsageDescription</key>
<string>We need Photos access to allow you to update Profile Picture.</string>
var permission = Platform.isAndroid
        ? Permission.storage
        : Permission.photos;

var permissionStatus = await permission.request();

print("isGranted: " +
        permissionStatus.isGranted.toString() +
        " isDenied: " +
        permissionStatus.isDenied.toString() +
        " isLimited: " +
        permissionStatus.isLimited.toString() +
        " isRestricted: " +
        permissionStatus.isRestricted.toString() +
        " isPermanentlyDenied: " +
        permissionStatus.isPermanentlyDenied.toString());


flutter:is granted:false is defined:false is limited:false is restricted:false is permanently denied:true

我试图在模拟器(iPhone 12pro-max)上卸载并重新安装应用程序,但仍然无法请求权限(显示请求弹出窗口)。

我试过这个,这个,这个和这个。但问题依然存在。

共有3个答案

唐弘益
2023-03-14

使用最新的< code>permission_handler:包。向您的< code>Info.plist文件添加照片权限。

 <!-- Permission options for the `photos` group -->
    <key>NSPhotoLibraryUsageDescription</key>
    <string>photos</string>

将以下内容添加到Podfile文件中:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    ... # Here are some configurations automatically generated by flutter

    # Start of the permission_handler configuration
    target.build_configurations.each do |config|

      # You can enable the permissions needed here. For example to enable camera
      # permission, just remove the `#` character in front so it looks like this:
      #
      # ## dart: PermissionGroup.camera
      # 'PERMISSION_CAMERA=1'
      #
      #  Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',

        ## dart: PermissionGroup.calendar
        # 'PERMISSION_EVENTS=1',

        ## dart: PermissionGroup.reminders
        # 'PERMISSION_REMINDERS=1',

        ## dart: PermissionGroup.contacts
        # 'PERMISSION_CONTACTS=1',

        ## 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]
        # 'PERMISSION_LOCATION=1',

        ## dart: PermissionGroup.notification
        # 'PERMISSION_NOTIFICATIONS=1',

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

        ## dart: PermissionGroup.sensors
        # 'PERMISSION_SENSORS=1',   

        ## dart: PermissionGroup.bluetooth
        # 'PERMISSION_BLUETOOTH=1',

        ## dart: PermissionGroup.appTrackingTransparency
        # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',

        ## dart: PermissionGroup.criticalAlerts
        # 'PERMISSION_CRITICAL_ALERTS=1'
      ]

    end 
    # End of the permission_handler configuration
  end
end

如果您需要添加更多权限。删除您想要使用的权限前面的#字符。例如

   ## dart: PermissionGroup.photos
             'PERMISSION_PHOTOS=1',

在flutter中,请求var status = await permission . photos . request();if (status.isDenied) { //我们尚未请求许可,或者许可之前已被拒绝,但不是永久拒绝。}

终于打扫干净了

韦高阳
2023-03-14

首先复制并粘贴下面的代码到你的podfile中。然后设置' PERMISSION_PHOTOS=1 ',如果你不想使用另一个权限,你可以删除或设置它=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

然后将其添加到信息中。plist文件

<key>NSPhotoLibraryUsageDescription</key>
 <string>We need Photos access to allow you to update Profile Picture.</string>

最后,在你的项目中使用permission_handler插件,并在你想要请求许可的地方添加这段代码。

 var permissionStatus = await permission.request();
阮鸿煊
2023-03-14

iOS上权限包的行为已更改为将所有权限默认为拒绝。您必须更新PList并打开您希望在应用程序中使用的权限,它才能工作。

 类似资料:
  • 问题内容: 我有一个在Kubernetes中的POD上运行的应用程序。我想将一些输出文件日志存储在持久存储卷上。 为此,我在NFS上创建了一个卷,并通过相关的卷声明将其绑定到POD。当我尝试写入或访问共享文件夹时,由于“ NFS”显然是只读的,因此收到“权限被拒绝”消息。 以下是我用来创建卷的json文件: 以下是POD配置文件 有没有办法更改权限? 更新 这是PVC和NFS配置: PVC: NF

  • logcat给我这个错误: 当我将应用程序从eclipse部署到emulator时,它工作正常。当我关闭应用程序并尝试再次运行时,出现问题,然后我收到消息: 这是我的舱单。xml 有人能检查一下出了什么问题吗? 谢谢

  • 问题内容: 当我尝试运行简单的docker命令时,例如: 我收到一条错误消息: 获得权限被拒绝… /var/run/docker.sock:connect:权限被拒绝 当我检查权限 我看到这一行: 因此,我遵循许多论坛的建议并将本地用户添加到docker组: 但这无济于事。我仍然收到非常相同的错误消息。我该如何解决? 问题答案: 对于那些刚接触shell的人,命令: 需要在您的外壳中定义。默认情况

  • 问题内容: 尝试显示URI时出现以下异常。我认为这是在我的活动停止后发生的,我尝试再次访问可行的URI。还有其他问题可以解决这个问题,但是我对如何对我的代码应用任何解决方案感到非常困惑,因为我的takePhotoIntent允许拍照或从图库中选择图片(如下所示)。 我的createImageFile和我的takePhotoIntent: 问题答案: 根据Storage Access Framewo