iOS端使用flutter_sound ^8.3.12出现RecordingPermissionException异常求解
异常诱因
flutter_sound 8.3.12在iOS端运行时,要求在初始化录音器前必须已获得麦克风权限,仅在Info.plist中配置权限说明无法满足运行时权限校验要求,未主动触发权限申请就调用录音器初始化方法时会直接抛出RecordingPermissionException异常。- 若已调用权限申请逻辑,但未等待授权结果返回就提前执行录音器初始化操作,也会触发该异常。
- iOS 15及以上系统对音频会话的启动时机做了更严格的限制,在权限未确认的情况下提前调用音频会话初始化接口,也会触发权限校验失败。
修复方案
- 第一步:在
pubspec.yaml中引入权限管理依赖permission_handler:
dependencies: flutter_sound: ^8.3.12 permission_handler: ^10.2.0
- 第二步:调整录音初始化逻辑,先申请麦克风权限,确认授权通过后再执行录音器初始化操作,参考代码如下:
import 'package:permission_handler/permission_handler.dart'; import 'package:flutter_sound/flutter_sound.dart'; Future<void> prepareRecorder() async { // 申请麦克风权限 PermissionStatus micPermission = await Permission.microphone.request(); if (!micPermission.isGranted) { // 自行处理权限拒绝逻辑,比如弹窗提示用户 return; } // 权限通过后再初始化录音器、配置音频会话 FlutterSoundRecorder recorder = FlutterSoundRecorder(); await recorder.openRecorder(); // 后续录音配置逻辑 }
- 第三步:调整代码执行顺序,确保所有音频会话相关的初始化操作,都放在麦克风权限授权通过之后执行,不要提前调用
openAudioSession相关接口。
内容的提问来源于stack exchange,提问作者nike
相关产品推荐
相关产品推荐

