Flutter3.0在Android 15上如何适配permission.storage权限 标题已修改完成

在Flutter 3.0项目中,当运行在Android 15设备上时,发现无法正常申请android.permission.STORAGE权限。按照官方文档配置了AndroidManifest.xml并使用了permission_handler插件,但权限弹窗不弹出,且检查权限状态始终返回denied。请问该如何正确适配Android 15的存储权限?是否需要额外配置或使用新的API?

2 回复

Flutter 3.0适配Android 15的存储权限需注意:

  1. AndroidManifest.xml中添加READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限。
  2. 使用permission_handler插件动态申请权限。
  3. 适配Android分区存储(Scoped Storage),改用MediaStore或SAF访问文件。
  4. 测试权限弹窗和用户拒绝后的处理逻辑。

更多关于Flutter3.0在Android 15上如何适配permission.storage权限 标题已修改完成的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 3.0 在 Android 15 上适配 STORAGE 权限时,需注意 Android 15 对存储权限的进一步限制。以下是适配步骤:

1. 更新 Android 依赖项

确保 android/app/build.gradle 中的 compileSdkVersiontargetSdkVersion 至少为 34(对应 Android 15):

android {
    compileSdkVersion 34
    defaultConfig {
        targetSdkVersion 34
    }
}

2. 权限声明

android/app/src/main/AndroidManifest.xml 中声明必要的权限:

<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" />
  • 注意:Android 15 中,READ_EXTERNAL_STORAGE 权限已废弃,需使用上述媒体类型细分权限。

3. 动态请求权限

使用 permission_handler 插件请求权限:

import 'package:permission_handler/permission_handler.dart';

// 请求存储权限
Future<void> requestStoragePermission() async {
  var status = await Permission.manageExternalStorage.status;
  if (!status.isGranted) {
    status = await Permission.manageExternalStorage.request();
    if (status.isDenied) {
      // 处理权限被拒绝
    }
  }
}
  • 对于访问全部文件(如文件管理器),需请求 MANAGE_EXTERNAL_STORAGE 权限,但 Google Play 对此有严格限制,建议优先使用媒体库 API。

4. 使用特定媒体 API

通过 image_pickerfile_picker 等插件访问媒体文件,避免直接使用存储路径:

// 使用 image_picker 选择图片
final image = await ImagePicker().pickImage(source: ImageSource.gallery);

5. 测试权限处理

在 Android 15 设备或模拟器上测试权限请求流程,确保用户拒绝时应用能正常降级处理。

总结

  • 优先使用细分媒体权限(如图片、视频、音频)。
  • 避免依赖 MANAGE_EXTERNAL_STORAGE,除非必要。
  • 利用 Flutter 插件简化文件访问逻辑。
回到顶部