Flutter安卓录音存储权限问题:权限未授予致录音失败
解决Android 13录音App权限未授予问题
1. 补充核心录音权限
Android 13录音必须声明RECORD_AUDIO权限,你的AndroidManifest.xml漏掉了这个关键权限,立即添加:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
该权限属于危险权限,必须配合动态请求(你代码中已请求Permission.microphone,对应此权限),但前提是先在Manifest中声明。
2. 适配Android 13存储权限规则
Android 13(API 33+)废弃了READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE,改用媒体细分权限。但如果录音文件存储到应用私有目录,完全不需要申请存储权限——系统默认允许应用读写自身私有目录。
优先优化存储路径(推荐)
将录音路径改为应用私有外部存储目录,彻底绕过存储权限请求:
// 替换原Paths.recording为私有目录路径 Directory appFolder = await getExternalFilesDir(Environment.DIRECTORY_MUSIC); // 或使用内部私有目录 // Directory appFolder = await getApplicationDocumentsDirectory();
调整后可直接删除代码中Permission.storage的请求,减少权限申请环节,避免权限被拒绝风险。
3. 修正动态权限请求逻辑(若需公共目录存储)
如果必须存储到公共媒体目录,Android 13需请求READ_MEDIA_AUDIO权限(WRITE_MEDIA_AUDIO无需动态请求,仅需Manifest声明)。原代码中Permission.storage在API33+已失效,需按版本适配:
Map<Permission, PermissionStatus> permissions; final androidInfo = await DeviceInfoPlugin().androidInfo; if (Platform.isAndroid && androidInfo.version.sdkInt >= 33) { permissions = await [ Permission.microphone, Permission.audio, // 对应READ_MEDIA_AUDIO ].request(); } else { permissions = await [ Permission.microphone, Permission.storage, ].request(); }
同时更新Manifest权限声明:
<!-- API33+ 音频媒体权限 --> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <uses-permission android:name="android.permission.WRITE_MEDIA_AUDIO" /> <!-- 兼容API32及以下存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
4. 排查权限拒绝详情
在代码中添加权限状态日志,明确哪个权限被拒绝:
print('麦克风权限状态: ${permissions[Permission.microphone]}'); final androidInfo = await DeviceInfoPlugin().androidInfo; if (Platform.isAndroid && androidInfo.version.sdkInt >= 33) { print('音频媒体权限状态: ${permissions[Permission.audio]}'); } else { print('存储权限状态: ${permissions[Permission.storage]}'); }
5. 移除冗余权限
你的Manifest中MANAGE_EXTERNAL_STORAGE是用于全文件访问的特殊权限,普通录音App完全不需要,直接删除该声明,避免不必要的权限流程干扰。
内容的提问来源于stack exchange,提问作者st4tic
相关产品推荐
相关产品推荐

