Flutter中AndroidManifest.xml权限无效,为何需permission_handler?
为什么仅在AndroidManifest.xml声明麦克风权限还不够?
你之前的认知偏差,核心是没搞清楚Android权限模型的版本变化——在Android 6.0(API 23)之前,确实只要在AndroidManifest.xml里声明权限,应用安装时就会自动拿到所有声明的权限;但从Android 6.0开始,Google引入了**危险权限(Dangerous Permissions)**机制,这类涉及用户隐私的权限,必须在应用运行时主动向用户申请,等用户点同意了才能用。
具体原因拆解:
- RECORD_AUDIO属于危险权限:麦克风权限(
android.permission.RECORD_AUDIO)被归类为危险权限,因为它能获取用户的录音内容,涉及隐私安全。这类权限系统不会在安装时自动授予,必须在应用运行过程中,通过代码触发权限申请弹窗,由用户手动授权。 - Manifest声明只是前提,不是全部:
AndroidManifest.xml里的<uses-permission>只是告诉系统“我的应用需要这个权限”,是权限申请的基础配置;但真正拿到权限,必须走动态申请的流程。哪怕你在Manifest里写了权限声明,没做动态申请的话,应用实际还是无法访问麦克风。 - Flutter跨平台的必要性:你用的
permission_handler库是Flutter生态中封装双平台权限逻辑的工具——iOS同样要求麦克风权限必须通过代码动态申请并获得用户授权,用这个库可以统一写一套代码处理Android和iOS的权限流程,不用分别编写原生代码。
正确的权限使用流程:
- 第一步:在
AndroidManifest.xml(iOS需同步配置Info.plist)中声明所需权限,完成基础配置; - 第二步:在应用触发录音功能前(比如用户点击录音按钮时),调用权限申请代码:
Map<Permission, PermissionStatus> statuses = await [Permission.microphone].request(); - 第三步:判断权限申请结果,只有用户授权通过后,再调用麦克风相关功能。
内容的提问来源于stack exchange,提问作者user5182503
相关产品推荐
相关产品推荐

