Android CompanionDeviceService 触发onDeviceAppeared后立即解绑异常
问题原因
- 未完成正式的伴侣设备关联流程
仅调用startObservingDevicePresence无法让系统将对应BLE设备识别为你应用的合法关联设备,系统仅会触发一次存在检测回调,随后就会解绑销毁服务。 - 设备未完成配对(Bond)
你提到的未调用createBond确实和异常直接相关,Android 12要求伴侣设备必须完成配对,才会触发系统的服务保活逻辑,未配对设备仅会触发单次回调。 - 权限未完成动态授权
清单中声明的REQUEST_COMPANION_RUN_IN_BACKGROUND、REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE等权限,不是仅在清单声明即可生效,需要用户在设备关联流程中手动同意授权后才会生效。
修复步骤
- 先走完整的伴侣设备关联流程:
构建AssociationRequest指定BLE设备类型,调用CompanionDeviceManager.associate()拉起系统的设备选择弹窗,用户选择目标设备后得到AssociationInfo,完成应用和设备的官方关联。 - 完成设备配对:
关联流程中系统会自动触发配对请求,也可以在关联成功后主动调用createBond完成设备配对,确保设备处于已绑定状态。 - 完成所需权限的动态申请:
先动态申请蓝牙基础权限:BLUETOOTH_SCAN、BLUETOOTH_CONNECT、ACCESS_FINE_LOCATION,关联设备时引导用户同意伴侣设备后台运行、设备存在检测的相关权限。 - 关联完成后再调用
startObservingDevicePresence:
等上述流程都走完之后再调用设备存在检测方法,此时系统会按照官方文档说明,在设备附近时保持CompanionDeviceService的绑定状态。
内容的提问来源于stack exchange,提问作者Maragues
相关产品推荐
相关产品推荐

