Android调用connectGatt配对BLE设备弹出两次确认对话框问题问询
BLE连接两次配对弹窗问题排查结论
问题归属判定
该问题属于Android 12及以上版本的系统蓝牙栈Bug,无需优先排查业务代码逻辑。
判定依据
- 复现特征完全匹配AOSP公开的系统issue:Android 12重构蓝牙栈逻辑后,处理未配对BLE设备的
device.connectGatt(appCtx, autoConnect, getCentralGattCallback());调用时,会重复触发两次配对绑定流程,第一次的配对确认结果会被系统内部丢弃,只有第二次确认完成后才会继续执行后续连接逻辑,触发onConnectionStateChange回调。 - 版本差异可直接佐证:Android 10及更低版本蓝牙栈没有该冗余配对判断逻辑,仅会弹出1次配对窗口,与测试的OnePlus 5T表现完全吻合。
- 跨外设复现排除其他干扰:测试覆盖的Nonin 3230血氧仪、A&D体重秤、血压仪等不同品牌外设均出现相同问题,已经排除外设固件不兼容的可能,进一步确认问题出在系统层。
临时规避方案
- 主动提前触发配对:扫描到目标设备后,先调用
BluetoothDevice.createBond()主动发起配对,配对成功后再调用connectGatt建立GATT连接,可避免重复弹出配对窗口。 - 版本适配提示:如果业务逻辑不允许修改连接流程,可以针对Android 12及以上版本的设备添加引导提示,告知用户需要确认两次配对请求,降低用户困惑。
内容的提问来源于stack exchange,提问作者maxbk
相关产品推荐
相关产品推荐

