我正在使用读写权限来访问外部存储并获取权限,我正在使用权限处理程序包
AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
为了获得用户的许可
var status = await Permission.storage.request();
if (status.isGranted) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => const Home())
);
} else if (status.isPermanentlyDenied) {
openAppSettings();
}
上述权限和代码在 Android 版本 12 之前都可以完美运行,但是当涉及到 Android 版本 13 时,它就不起作用了,它只是打开应用程序设置而不是询问权限
设置1
添加权限android清单
<!-- Required only if your app targets Android 13 or higher. -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="33" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="33" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
设置2
var status = await Permission.manageExternalStorage.request();
if (status.isGranted) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => const Home())
);
} else if (status.isPermanentlyDenied) {
openAppSettings();
}
如果您使用 targetSdk 版本 33,则使用以下代码。
bool permissionStatus;
final deviceInfo = await DeviceInfoPlugin().androidInfo;
if (deviceInfo.version.sdkInt > 32) {
permissionStatus = await Permission.photos.request().isGranted;
} else {
permissionStatus = await Permission.storage.request().isGranted;
}
使用此权限清单文件:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
适用于 Android 13 或更高版本
菜单权限
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
permission_handler(请求)
await Permission.photos.request();