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

devtools/2024/9/24 19:36:25/

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

文章目录

  • Android14 手机蓝牙配对后阻塞问题解决
    • 一、前言
    • 二、手机蓝牙配对后阻塞问题解决
      • 1、部分日志:
      • 2、解决方法
    • 三、其他
      • 1、Android14 蓝牙 BluetoothService 启动和相关代码介绍
      • 2、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


http://www.ppmy.cn/devtools/116634.html

相关文章

宠物去浮毛救星?希喂、小米、霍尼韦尔宠物空气净化器哪款好用

怎么有人放假也不开心? 快到的国庆假期真是愁死我了...本来我妈国庆去旅游,我就打算不回家,和我家猫过二人世界。结果突然有事,我妈取消出行,改成让我假期回家陪她。我回家容易,我家猫回去可难啊&#xff…

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &a…

成为谷歌开发者专家(GDE)的经历

大家好,我是张海龙(Jason)。经过一年多的准备,GDE申请 终于正式成功通过面试,成为了国内第一位Firebase GDE。下面对整个过程做个总结,希望对大家有所帮助。 1.什么是 GDE? Google Developers上面有详细的说明&#x…

PyTorch 激活函数及非线性变换详解

激活函数是深度学习模型的重要组成部分,它们引入非线性,从而使模型能够更好地拟合复杂的数据模式。本文将详细介绍激活函数的作用、常见类型、经典应用示例,并比较它们的优缺点。 激活函数的作用 激活函数的主要作用是引入非线性变换&#…

穿透式薪酬监管,红海云打造“三全”数智化薪酬管理系统

近年来,三项制度改革一直是国企改革的重点方向,推动企业收入分配与激励制度的完善成为重要任务。 (央国企薪酬管理改革政策与指导文件) 为实现中央企业薪酬管理的有效监管与数据互联互通,国务院国资委在2024年7月31日…

Vue学习记录之八(局部组件,全局组件,递归组件,动态组件)

一、局部组件 在src\components\Card.vue 建立一个文件&#xff0c;代码如下&#xff1a; <template><div class"card"><header><div>标题</div><div>副标题</div></header><section>内容</section>&…

sklearn特征选取之SelectFromModel

sklearn.feature_selection.SelectFromModel 是一种基于模型的重要性权重进行特征选择的工具&#xff0c;允许我们根据学习器的权重或特征重要性自动选择特征。它通过从模型中提取特征的重要性来选择特征&#xff0c;常用于与那些具有 coef_ 或 feature_importances_ 属性的模型…

LeetCode[中等]

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 思路&#xff1a; 计算链表长度num&#xff0c;num - n就是需要删去结点的索引 其中若删去第一个结点&#xff0c;返回head.next; /*** Definition for singly-linked list.* public …