今天遇到一个很奇怪的问题,本来是想使用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" />
网友评论