Flutter permissions_handler蓝牙权限被拒,重复权限致Play Store审核失败求助
解决蓝牙权限请求失败+通过Google Play审核的方案
问题根源
重复添加BLUETOOTH权限只是临时hack,既不符合Play Store权限规范,也没解决本质问题——你没针对不同Android版本配置正确的权限集,导致permissions_handler插件无法正常申请权限。
正确操作步骤
1. 移除重复权限声明
先把AndroidManifest.xml里重复的<uses-permission android:name="android.permission.BLUETOOTH"/>删掉,仅保留一份即可。
2. 按Android版本配置对应权限
Android 12(API 31)及以上的蓝牙权限规则和旧版本差异很大,必须针对性声明:
- Android 11及以下:保留
BLUETOOTH、BLUETOOTH_ADMIN,同时需要位置权限(旧版本蓝牙扫描依赖位置权限) - Android 12及以上:用
BLUETOOTH_SCAN、BLUETOOTH_CONNECT替代旧权限,若App不需要通过蓝牙获取位置,还可添加android:usesPermissionFlags="neverForLocation"标记来规避位置权限要求
修改后的权限配置示例:
<uses-feature android:name="android.hardware.bluetooth" android:required="true"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 仅对Android 11及以下生效 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/> <!-- 仅对Android 12及以上生效 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- 不需要蓝牙广播功能可删除此行 --> <!-- <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> -->
3. 适配Dart端权限请求逻辑
在Flutter代码中,根据Android版本动态请求对应权限,避免无效权限申请:
import 'package:permission_handler/permission_handler.dart'; import 'package:device_info_plus/device_info_plus.dart'; Future<void> requestBluetoothPermissions() async { final androidInfo = await DeviceInfoPlugin().androidInfo; if (androidInfo.version.sdkInt >= 31) { // Android 12+ 申请蓝牙扫描和连接权限 await Permission.bluetoothScan.request(); await Permission.bluetoothConnect.request(); } else { // Android 11及以下 申请蓝牙和位置权限 await Permission.bluetooth.request(); await Permission.location.request(); } }
4. Play Store审核注意事项
- 权限声明必须和App实际功能匹配,禁止添加无关权限
- 若给
BLUETOOTH_SCAN添加了neverForLocation标记,需在Play Console的权限声明模块明确说明App不通过蓝牙获取位置信息 - 确保无任何重复权限声明,这是Play Store审核的硬性要求
验证流程
- 清理项目构建缓存:执行
flutter clean - 重新构建安装包:
flutter build appbundle - 在不同Android版本的真机上测试权限申请流程
- 上传至Play Store提交审核
内容的提问来源于stack exchange,提问作者jon ollo
相关产品推荐
相关产品推荐

