美文网首页
Flutter No permissions found in

Flutter No permissions found in

作者: Pino | 来源:发表于2024-02-29 14:21 被阅读0次

今天遇到一个很奇怪的问题,本来是想使用permission_handler获取手机存储的权限
然后添加依赖,执行请求代码

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Future<bool> checkPermissFunction() async{
    final permissionStatus = await Permission.storage.status;
    print("permissionStatus:${permissionStatus.name}");
    if (permissionStatus.isDenied) {
      final res=await Permission.storage.request();
      print("res:${res.name}");
      if (res.isDenied) {
        return await openAppSettings();
      }
      return true;
    } else if (permissionStatus.isPermanentlyDenied) {
      return await openAppSettings();
    } else {
      return false;
    }
  }

结果申请的时候,没有弹窗申请授权,一直报 No permissions found in manifest for: []15
这个15就是权限框架定义的类型

static const storage = Permission._(15);

意思就是这个权限没有在 manifest中注册,我很奇怪,我明明有注册

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

为了检测是不是这个问题引起,另外申请一个没有在AndroidManifest.xml注册的权限
比如 Permission.audio.request();结果报一样的问题No permissions found in manifest for: []33,
当我把 <uses-permission android:name="android.permission.RECORD_AUDIO" />加上,就正常弹窗授权了。

那就是证明了 我们的AndroidManifest.xml文件中没有注册READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE,可是我明明写了啊,难道还有假不成?
后面查了很久资料发现,如果其他依赖包的AndroidManifest.xml也注册类似READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE,那么可能会被覆盖
于是去复查,发现image_pickers依赖包中

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>

我编译的sdk版本是34的

 defaultConfig {
        applicationId "com.example.flutter_test_demo"
        minSdkVersion 22
        targetSdkVersion 34
        compileSdkVersion 34
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

合并之后,就是只有32或者32以下版本的才加上

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

解决办法,加上tools:remove="android:maxSdkVersion即可

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
 tools:remove="android:maxSdkVersion" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"     
 tools:remove="android:maxSdkVersion" />

相关文章

网友评论

      本文标题:Flutter No permissions found in

      本文链接:https://www.haomeiwen.com/subject/hjrqzdtx.html