必须彻底移除蓝牙功能:一删manifest中android.permission.bluetooth_scan等权限声明及ios的nsbluetoothalwaysusagedescription;二清代码中所有uni.openbluetoothadapter等api调用及监听器;三确保无残留调用,否则真机静默失败或耗电异常。

不能“取消蓝牙权限要求”,只能移除 manifest 中的声明,但必须同步清理所有相关调用逻辑,否则真机上会静默失败或报错。
manifest.json 里删掉蓝牙权限声明
在 manifest.json 的 app-plus.distribute.android.permissions 数组中,删掉所有蓝牙相关字符串,例如:
"android.permission.BLUETOOTH_SCAN""android.permission.BLUETOOTH_CONNECT"-
"android.permission.ACCESS_FINE_LOCATION"(如果仅因蓝牙扫描而加)
注意:不要留空数组,也不要保留注释形式的占位项;HBuilderX 云端打包时会忽略无效项,但残留字段可能误导后续维护。
iOS 的 NSBluetoothAlwaysUsageDescription 必须一并删除
在 manifest.json 的 app-plus.ios.usingSandbox 同级路径下,检查是否存在 NSBluetoothAlwaysUsageDescription 字段。如果已移除蓝牙功能,这个字符串文案也得删掉,否则 Xcode 打包会警告,App Store 审核可能质疑“声明了权限却未使用”。
常见错误写法:"NSBluetoothAlwaysUsageDescription": "用于连接蓝牙设备" → 若代码里已无任何 uni.openBluetoothAdapter 或相关 API 调用,该字段即冗余。
代码里彻底清除蓝牙 API 调用链
仅删 manifest 不够,运行时若仍执行以下任意操作,真机会直接进 fail 回调且无明确提示:
- 调用
uni.openBluetoothAdapter(errCode=10000 或 10001) - 调用
uni.startBluetoothDevicesDiscovery(Android 12+ 会因缺失BLUETOOTH_SCAN权限静默拒绝) - 调用
uni.getConnectedBluetoothDevices(H5 环境报错,App 端可能返回空或 crash) - 未包裹
uni.canIUse('openBluetoothAdapter')就直接调用
建议全局搜索关键词:openBluetoothAdapter、startBluetoothDevicesDiscovery、onBLEConnectionStateChange,确认全部移除或用条件编译屏蔽(如 #ifdef APP-PLUS 内也不应存在)。
安卓厂商对残留权限的敏感行为
部分机型(华为 EMUI、小米 MIUI)会在安装时预扫描 AndroidManifest.xml 中声明的权限。即使你没调用蓝牙 API,只要 manifest 里还留着 BLUETOOTH_SCAN,系统就可能在后台尝试初始化蓝牙扫描模块,导致耗电异常或触发“未使用权限”弹窗提醒用户。
真正干净的移除包括三步:
- 删
manifest.json中的权限数组项 - 删 iOS 描述字段
NSBluetoothAlwaysUsageDescription - 删代码中所有蓝牙相关 API 调用及监听器注册
少做任何一步,都可能让“看似已关闭”的蓝牙功能,在真机上留下不可见的副作用。











