Android 13 中的存储权限 - Flutter

问题描述 投票:0回答:3

我正在使用读写权限来访问外部存储并获取权限,我正在使用权限处理程序包

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 时,它就不起作用了,它只是打开应用程序设置而不是询问权限

android flutter dart android-permissions
3个回答
5
投票

设置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();
}


4
投票

如果您使用 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" />

3
投票

适用于 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();
© www.soinside.com 2019 - 2024. All rights reserved.