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

news2024/9/22 23:18:48

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.coloradmin.cn/o/2156096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络层协议 —— IP协议

目录 0.前言 1.IP协议的格式 2.IP地址 2.1IP地址的划分 国际间IP地址的划分 公有IP 私有IP 特殊的IP地址 国内IP地址的划分 2.2IP地址不足问题 2.3IP地址的功能 2.4如何使用IP地址 2.5IP地址的构成 3.网段划分 以前的方案 现在的方案 4.认识宏观网络 5.路由 …

MySQL篇(事务 - 基础)

目录 一、简介 二、事务操作 1. 数据准备 2. 未控制事务 2.1. 测试正常情况 2.2. 测试异常情况 3. 控制事务 3.1. 控制事务一 查看/设置事务提交方式 提交事务 回滚事务 3.2. 控制事务二 开启事务 提交事务 回滚事务 3.3. 转账案例 四、事务的好处 五、事务四…

入门数据结构JAVA DS——二叉树的介绍 (构建,性质,基本操作等) (1)

前言 二叉树的概念和性质 二叉树的基本概念 二叉树的种类 二叉树的性质 二叉树的构建存储与遍历 存储 构建 遍历 前序遍历 后序遍历 中序遍历 层序遍历 二叉树的基本操作 获取树中结点个数 获取叶子结点个数 获取第K层结点的个数 获取二叉树的高度 检测值为v…

C++ —— vector 的模拟实现

目录 前言 1. vector深度剖析 2. 基础框架 3. 核心接口 3.1 reserve 3.2 push_back 和 pop_back 3.3 print 3.4 insert 3.5 erase 3.6 resize 4. 拷贝构造 4.1 构造与析构 4.2 拷贝构造 4.3 赋值重载 4.4 迭代器区间 5. 使用memcpy拷贝问题 前言 接:C —— 关于…

FX5 CPU模块和以太网模块的以太网通信功能

FX5 CPU模块和以太网模块的以太网通信功能的概要如下所示。 CPU模块的内置以太网端口的通信规格如下所示。 1、与MELSOFT的直接连接 不使用集线器,用1根以太网电缆直接连接以太网搭载模块与工程工具(GX Torks3)。无需设定IP地址,仅连接目标指定即可进行…

学习Java(一)类和对象

package demo.ceshi;public class Puppy {private int age;private String name;//构造器public Puppy( String name){this.name name;System.out.println("公主的名字叫:"name);}//设置age的值public void setAge(int age){this.age age;System.out.pr…

数值计算 --- 平方根倒数快速算法(中)

平方根倒数快速算法 --- 向Greg Walsh致敬! 1,平方根倒数快速算法是如何选择初值的?WTF中的神秘数字究竟是怎么来的? 花开两朵,各表一枝。在前面的介绍中,我们已经知道了这段代码的作者在函数的最后使用了NR-iteratio…

CVE-2024-46103

前言 CVE-2024-46103 SEMCMS的sql漏洞。 漏洞简介 SEMCMS v4.8中,SEMCMS_Images.php的search参数,以及SEMCMS_Products.php的search参数,存在sql注入漏洞。 (这个之前就有两个sql的cve,这次属于是捡漏了&#x1f6…

【MATLAB源码-第268期】基于simulink的永磁同步电机PMSM双闭环矢量控制系统SVPWM仿真,输出转速响应曲线。

操作环境: MATLAB 2022a 1、算法描述 永磁同步电机(PMSM)是目前工业领域中广泛使用的一种高效电机,其具有高功率密度、运行效率高、动态响应快等优点。在控制永磁同步电机时,通常采用矢量控制(也称为磁场…

新160个crackme - 060-snake

运行分析 需破解Name和Serial PE分析 32位,未知程序和壳 点击Scan/t按钮外部扫描,发现是C程序 静态分析&动态调试 ida搜索关键字符串,双击进入 发现无法反编译 选中该函数(地址:401048 - 401172)Edit -…

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…

PMP--二模--解题--51-60

文章目录 14.敏捷--术语表--完成的定义DoD--它是团队需要满足的所有标准的核对单,只有可交付成果满足该核对单才能视为准备就绪可供客户使用。51、 [单选] 在冲刺计划会议上,Scrum主管重申,如果在冲刺结束时敏捷项目团队正在构建的产品增量没…

五种IO模型和阻塞IO

文章目录 五种 IO 模型和阻塞 IO1、五种 IO 模型1.1、阻塞 IO1.2、非阻塞 IO1.3、信号驱动 IO1.4、IO 多路转接1.5、异步 IO1.6、总结 2、高级 IO 概念2.1、同步通信(synchronous communication)和异步通信(asynchronous communication&#…

第十五章:使用html、css、js编程制作一个网页版的下雪场景动画

背景:这是一个充满诗意的下雪场景代码。打开网页时,雪花轻轻飘落,覆盖住你的屏幕,仿佛置身于冬日的夜空下。背景音乐《我期待的不是雪》缓缓响起,伴随着雪花的飘动,仿佛心中的那份爱与温柔悄然绽放。 雪花的飘落是梦境般的存在,每一片雪花都是轻盈的告白,旋转着从天际…

使用GitHub Actions自动发布electron多端安装程序

GitHub Actions 是一个强大的自动化工具,可以帮助开发者在 GitHub 仓库中自动化构建、测试和部署工作流程。我们的客户端就是使用github action来打包项目发布的。 以下是关于 GitHub Actions 自动化构建的一些关键点和步骤: GitHub Actions 的基本概念…

go注册中心Eureka,注册到线上和线下,都可以访问

go注册中心Eureka,注册到线上和线下,都可以访问 本地通过127访问, 线上通过内网ip访问 package mainimport ("github.com/SimonWang00/goeureka""github.com/gin-gonic/gin""wbGo/controller""wbGo/task…

【工具变量】地市环保法庭试点城市DID数据集(2005-2023年)

数据简介:环保法庭是中国司法体系中专门处理环境资源案件的审判机构,其主要职责包括审理涉及自然环境污染、矿产资源保护、自然资源环境开发等环境资源民事纠纷案件,对不服下级人民法院生效裁判的环境资源民事案件进行审查,以及对…

Java_Se--方法

方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义(不要背, 重在体会): 1. 是能够模块化的组织代码 ( 当代码规模比较复杂的时候 ). 2. 做到代码被重复使用 , 一份代码可以在多个位置使用 . 3. 让代码更好理解更简单 . 4. 直接调用现有方法开…

cv中每个patch的关联

在计算机视觉任务中,当图像被划分为多个小块(patches)时,每个 patch 的关联性可以通过不同的方法来计算。具体取决于使用的模型和任务,以下是一些常见的计算 patch 关联性的方法: 1. Vision Transformer (…

IDA Pro-代码结构识别

Lab06-01.exe分析 1.由main 函数调用的唯一子过程中发现的主要代码结构是什么? if语句结构 找到main函数中唯一调用的函数,并进入 判断网络是否链接成功,如果返回0走右边未连接成功 2.位于0x40105F的子过程是什么? 将字符串压栈,猜测…