Android14 手机蓝牙配对后阻塞问题解决

Android14 手机蓝牙配对后阻塞问题解决

文章目录

一、前言

Android13、14 手机配对蓝牙后会造成阻塞问题。

Google 问题。测试了Android13 Google 手机也是有这个问题。

具体复现步骤和现象就是:

一台Google手机蓝牙配对另外一台手机的蓝牙后,

Google 手机重新扫描蓝牙设备就会无法扫描到其他设备,需要等待20多秒超时处理后才能重新看到扫描的蓝牙设备。

这个问题是Android14设备中一个自定义的系统应用不断连接、断开蓝牙出现无法扫描到蓝牙情况后发现的,后续的解决是把手机配对后连接的流程时间减少解决的,不然中途一直进行其他操作就有可能导致蓝牙服务异常。

只有手机之间配对会存在这个问题,手机和蓝牙配对是没有这个问题的,

大概原因就是手机配对后想进入连接状态,但是实际上无法进入连接状态,一直处于某种阻塞状态,直到连接超时才恢复正常。

这里记录一下,有蓝牙相关功能开发的可以看看。

二、手机蓝牙配对后阻塞问题解决

1、部分日志:

复制代码
[16:05:06]09-06 16:05:07.854 22976 23060 W btm_acl : packages/modules/Bluetooth/system/stack/acl/btm_acl.cc:1167 BTM_IsAclConnectionUpAndHandleValid: Unable to find active acl
[16:05:06]09-06 16:05:07.857 22976 23019 I BluetoothBondStateMachine: Entering PendingCommandState State
[16:05:06]09-06 16:05:07.861 22976 23019 I BluetoothBondStateMachine: Bond State Change Intent:18:87:40:11:16:0E BOND_NONE => BOND_BONDING
[16:05:06]09-06 16:05:07.866 22976 23114 D BluetoothDatabase: getCustomMeta: device 18:87:40:11:16:0E is not in cache

[16:05:08]09-06 16:05:09.565 22976 23060 I btm_acl : packages/modules/Bluetooth/system/stack/acl/btm_acl.cc:1476 change_connection_packet_types: Unable to include remote supported packet types as read feature incomplete
[16:05:08]09-06 16:05:09.565 22976 23060 I btm_acl : packages/modules/Bluetooth/system/stack/acl/btm_acl.cc:1477 change_connection_packet_types: TIP: Maybe wait until read feature complete beforehand
[16:05:08]09-06 16:05:09.565 22976 23060 W btm_acl : packages/modules/Bluetooth/system/stack/acl/btm_acl.cc:1145 BTM_SetLinkSuperTout: Role is peripheral so unable to set supervision timeout:80.00ms bd_addr:xx:xx:xx:xx:16:0e
[16:05:08]09-06 16:05:09.565 22976 23060 I bt_btm_sec: packages/modules/Bluetooth/system/stack/btm/btm_sec.cc:4510 btm_sec_auth_timer_timeout: btm_sec_auth_timer_timeout: starting authentication

[16:05:12]09-06 16:05:13.725 22976 23019 D AdapterProperties: Adding bonded device:18:87:40:11:16:0E
[16:05:12]09-06 16:05:13.726 22976 23019 I BluetoothBondStateMachine: 18:87:40:11:16:0E is bonded, wait for SDP complete to broadcast bonded intent
[16:05:12]09-06 16:05:13.726 22976 23019 I BluetoothBondStateMachine: StableState(): Entering Off State

[16:05:16]09-06 16:05:17.971 22976 23060 W l2c_link: packages/modules/Bluetooth/system/stack/l2cap/l2c_link.cc:500 l2c_link_timeout: TODO: Remove this callback into bcm_sec_disconnect
[16:05:16]09-06 16:05:17.971 22976 23060 I btm_acl : packages/modules/Bluetooth/system/stack/acl/btm_acl.cc:188 hci_btsnd_hcic_disconnect: Disconnecting peer:xx:xx:xx:xx:16:0e reason:Remote Terminated Connection comment:stack::l2cap::l2c_link::l2c_link_timeout All channels closed

//下面这个日志之后,蓝牙列表才可以重新扫描到
[16:05:42]09-06 16:05:43.870 22976 23028 I bluetooth: packages/modules/Bluetooth/system/gd/hci/acl_manager/le_impl.h:909 on_create_connection_timeout: on_create_connection_timeout, address: 18:87:40:11:16:0e[PUBLIC_DEVICE_ADDRESS]

重点是:on_create_connection_timeout

上层的主要日志都是cpp相关,c的代码不熟悉,不做具体分析,这里直接提供一个答案。

2、解决方法

packages/modules/Bluetooth/system/gd/hci/acl_manager/le_impl.h

复制代码
constexpr uint32_t kCreateConnectionTimeoutMs = 5 * 1000; /* change connect time 原本是30秒 */

这个是供应商提供的对策。

里面蓝牙里面有很多不同连接的超时时间,上面这个时间是针对手机配对连接的。

虽然写的是5秒,但是实际1秒左右就跳过了。

上面可能不是最优解,但是也算是一种解决方式。

三、其他

1、Android14 蓝牙 BluetoothService 启动和相关代码介绍

复制代码
蓝牙开关和使能开发主要用到:BluetoothService、BluetoothManagerService、BluetoothManager、BluetoothAdapter 这几个系统相关类。
某个蓝牙的配对、连接、断开 使用的是 BluetoothDevice 对象。

蓝牙开关状态不记忆或者打开异常就可以看看BluetoothManagerService的日志,
里面有打开关闭相关过程日志和时间点,这个对问题分析有一定的帮助。

详细介绍:

https://blog.csdn.net/wenzhi20102321/article/details/142264944

2、Android14 待机关机蓝牙自动关闭分析解决

复制代码
Android14 设备蓝牙开启的情况,待机关机后再开机出现有概率蓝牙关闭的问题。

设备开机后手动打开蓝牙是可以正常打开的。

通过分析发现是上层的蓝牙服务中有监听关机广播,有关闭蓝牙动作。

但是为啥会出现有概率关闭呢,具体原因是因为有时候蓝牙关闭流程没走完或者有些蓝牙关闭流程未走到设置蓝牙关闭属性的情况。

详细介绍:

https://blog.csdn.net/wenzhi20102321/article/details/142265044

相关推荐
一笑的小酒馆7 小时前
Androidiot开发之猫脸识别
android
李永奉9 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑
三84410 小时前
PHP Session 反序列化(2):漏洞根因 —— 序列化处理器错位与对象注入
android·web安全·php·反序列化·session
天空之城--10 小时前
Android行业一周动态:编码趋势与行业资讯汇总
android·性能优化·架构·kotlin·android jetpack
Co_Hui12 小时前
Android Handler 内存泄漏分析
android
张小姐的猫12 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
Anhty16 小时前
叮咚变声器上手实测,iOS短板、安卓悬浮窗使用感受分享
android·人工智能·功能测试·ios·智能手机
方白羽16 小时前
OkHttp 5.3 隐形变更引发的线上偶发崩溃复盘
android·app·客户端
EatFan17 小时前
【实战经验】uni-app使用 SSE 踩坑,EventSource不支持怎么办?
android·后端·ios·uni-app
JMchen18 小时前
第 2 篇|Kotlin 进阶 —— 集合、循环与条件表达式
android·kotlin