Flutter3.0在Android 15上如何适配permission.storage权限 标题已修改完成
在Flutter 3.0项目中,当运行在Android 15设备上时,发现无法正常申请android.permission.STORAGE权限。按照官方文档配置了AndroidManifest.xml并使用了permission_handler插件,但权限弹窗不弹出,且检查权限状态始终返回denied。请问该如何正确适配Android 15的存储权限?是否需要额外配置或使用新的API?
Flutter 3.0适配Android 15的存储权限需注意:
- 在
AndroidManifest.xml中添加READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE权限。 - 使用
permission_handler插件动态申请权限。 - 适配Android分区存储(Scoped Storage),改用MediaStore或SAF访问文件。
- 测试权限弹窗和用户拒绝后的处理逻辑。
更多关于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 中的 compileSdkVersion 和 targetSdkVersion 至少为 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_picker 或 file_picker 等插件访问媒体文件,避免直接使用存储路径:
// 使用 image_picker 选择图片
final image = await ImagePicker().pickImage(source: ImageSource.gallery);
5. 测试权限处理
在 Android 15 设备或模拟器上测试权限请求流程,确保用户拒绝时应用能正常降级处理。
总结
- 优先使用细分媒体权限(如图片、视频、音频)。
- 避免依赖
MANAGE_EXTERNAL_STORAGE,除非必要。 - 利用 Flutter 插件简化文件访问逻辑。

