You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter在Android 12中遇权限错误:/storage/emulated/0/Android/obb访问被拒

解决Android 12上Flutter访问/storage/emulated/0/Android/obb权限被拒问题

问题原因

Android 12(API 31)及以上系统对外部存储权限做了更严格的限制,/storage/emulated/0/Android/obb属于系统管理的特殊目录,仅允许系统应用或拥有特殊权限的应用访问,常规的READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限无法覆盖这个目录的访问需求。

解决方案

1. 添加特殊存储管理权限

在android/app/src/main/AndroidManifest.xml中添加MANAGE_EXTERNAL_STORAGE权限,该权限用于申请访问所有外部存储的权限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    android:minSdkVersion="30" />

注意:这个权限属于特殊权限,无法仅通过代码动态申请直接获得,需要引导用户手动开启。

2. 动态申请权限并引导用户授权

使用permission_handler包处理权限申请逻辑,若权限未授予,跳转至应用设置页面让用户手动开启:

import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';

Future<void> checkAndRequestStoragePermission() async {
  final permissionStatus = await Permission.manageExternalStorage.status;
  if (!permissionStatus.isGranted) {
    final result = await Permission.manageExternalStorage.request();
    if (!result.isGranted) {
      // 跳转至应用设置页面
      await launchUrl(Uri.parse('app-settings:'));
    }
  }
}

3. 优先使用应用专属目录替代(推荐)

如果你的业务不需要访问其他应用的OBB文件,建议使用Flutter提供的应用专属目录,这类目录无需额外权限即可读写:

import 'package:path_provider/path_provider.dart';

// 获取应用文档目录
Future<Directory> getAppDocumentsDir() async {
  return await getApplicationDocumentsDirectory();
}

// 获取应用支持目录
Future<Directory> getAppSupportDir() async {
  return await getApplicationSupportDirectory();
}

内容的提问来源于stack exchange,提问作者Malik Hashir Awan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:05:46