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

安卓应用发布后蓝牙扫描异常无法搜索到BLE设备如何解决?

问题解决方案

1. 补充Android 12(API 31)及以上版本专属BLE权限

你当前配置的是安卓11及更低版本的BLE权限,从API 31开始,谷歌新增了BLE专属运行时权限,无需绑定位置权限即可使用,你需要在两个Manifest文件中补充以下配置:

<!-- 安卓12+ BLE扫描权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<!-- 安卓12+ BLE连接权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 若你的应用需要向外广播BLE信号再加这个,不需要可以不加 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

注意:如果你的应用扫描BLE设备确实需要关联位置信息,删除上面的android:usesPermissionFlags="neverForLocation"配置即可。

2. 补充运行时权限申请逻辑

你只在Manifest中声明权限是无效的,安卓6.0(API 23)及以上版本中,位置权限、安卓12+的BLE权限都属于危险权限,需要在代码中主动弹窗向用户申请,用户授权后才能正常使用BLE扫描功能。
额外注意:安卓10(API 29)及以上版本如果没有适配安卓12的专属BLE权限,需要申请ACCESS_FINE_LOCATION权限而非ACCESS_COARSE_LOCATION才能正常扫描BLE设备。
Debug版本正常通常是因为你调试时已经手动授予过权限,Release包首次安装时没有申请权限就会直接扫描失败。

3. 配置BLE组件混淆规则

Release包默认会开启代码混淆,如果你没有配置对应规则,BLE组件的核心类会被混淆裁剪导致功能失效。你需要在项目的android/app/proguard-rules.pro文件中添加BLE组件的免混淆规则,对应ble component 2.0.0版本的规则参考如下:

-keep class com.polidea.rxandroidble2.** { *; }
-keep class com.polidea.multiplatformbleadapter.** { *; }
-dontwarn com.polidea.rxandroidble2.**

如果使用的是其他BLE组件,替换为对应组件的包名即可。

4. 验证Manifest合并结果

部分第三方依赖可能会在构建时覆盖你声明的权限,你可以在打Release包后检查最终合并后的Manifest文件,确认所有配置的权限都正常存在:

  • 合并后的Manifest路径:android/app/build/intermediates/merged_manifest/release/AndroidManifest.xml

内容的提问来源于stack exchange,提问作者João Augusto Gomides

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:54:03