Android 13 中的存储权限 - Flutter

sha*_*yal 10 android dart android-permissions flutter

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

AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)

为了获得用户的许可

var status = await Permission.storage.request();
if (status.isGranted) {
  Navigator.of(context).pushReplacement(
    MaterialPageRoute(builder: (context) => const Home())
  );
} else if (status.isPermanentlyDenied) {
  openAppSettings();
}
Run Code Online (Sandbox Code Playgroud)

上述权限和代码适用于 Android 版本 12 之前的版本,但当涉及 Android 版本 13 时,它无法正常工作,它只是打开应用程序设置而不是询问权限

小智 13

适用于 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"/>
Run Code Online (Sandbox Code Playgroud)

权限处理程序(请求)

await Permission.photos.request();
Run Code Online (Sandbox Code Playgroud)

  • 唯一对我有用的解决方案,谢谢! (2认同)

小智 10

设置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"/>
Run Code Online (Sandbox Code Playgroud)

设置2

var status = await Permission.manageExternalStorage.request();
if (status.isGranted) {
  Navigator.of(context).pushReplacement(
    MaterialPageRoute(builder: (context) => const Home())
  );
} else if (status.isPermanentlyDenied) {
  openAppSettings();
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 6

如果您使用 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;
}
Run Code Online (Sandbox Code Playgroud)

使用此权限清单文件:

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
Run Code Online (Sandbox Code Playgroud)