You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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审核的硬性要求

验证流程

  1. 清理项目构建缓存:执行flutter clean
  2. 重新构建安装包:flutter build appbundle
  3. 在不同Android版本的真机上测试权限申请流程
  4. 上传至Play Store提交审核

内容的提问来源于stack exchange,提问作者jon ollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 12:37:35