Flutter iOS端使用permission_handler无法申请麦克风权限问题求助
Flutter iOS端麦克风权限申请不生效解决方案
1. 配置iOS Podfile权限开关
permission_handler 8.0及以上版本默认关闭了所有iOS端权限的编译选项,需手动在项目
ios/Podfile文件中添加麦克风权限对应的编译宏,否则即便配置了Info.plist也不会注册对应的权限项:
post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) # 新增以下权限配置 target.build_configurations.each do |config| # 开启麦克风权限,需要其他权限也可以对应设置为1 config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', 'PERMISSION_MICROPHONE=1', # 确认你已使用的相机、相册权限也对应开启 'PERMISSION_CAMERA=1', 'PERMISSION_PHOTOS=1' ] end end end
2. 确认Info.plist配置位置
确认你添加的NSMicrophoneUsageDescription配置是放在ios/Runner/Info.plist文件顶层的<dict>标签内部,不要错放在其他子节点或者注释块中。
3. 优化权限申请代码
你当前的代码连续两次调用了request()方法,第一次请求如果用户拒绝,第二次调用不会再触发系统弹窗,直接返回之前的授权状态,建议调整为单次请求判断:
Widget allowButton() { return OutlinedButton( child: const Text("ALLOW MIC"), onPressed: () async { // 仅请求一次权限 var status = await Permission.microphone.request(); print("权限状态:$status"); if (status.isGranted) { print("OK!!!"); } else { print("NOT OK!!!"); } } ); }
4. 重新编译生效
修改完配置后按照以下步骤操作:
- 卸载测试设备上已安装的当前应用,清除旧权限缓存
- 在项目根目录执行
flutter clean - 进入ios目录执行
pod deintegrate && pod install - 重新运行项目进行测试
内容的提问来源于stack exchange,提问作者sosnus
相关产品推荐
相关产品推荐

