连接关闭且应用程序终止后,BLE 堆栈反复重新连接到外设

2024-04-18

我有一个应用程序,它打开与 BLE 设备的短暂连接,执行一些特征读取和写入,然后断开并关闭连接。应用程序使用 autoReconnect=false,并且设备未配对或绑定。

我看到 Android 的一些非常奇怪的行为,它似乎反复且意外地重新连接到外围设备,即使在连接 close()d 之后,应用程序被杀死甚至卸载。

此问题之前已与 Spotify 触发重新连接相关(请参阅:Android BLE 意外且反复重新连接到外设 https://stackoverflow.com/questions/43160195/android-ble-unexpectedly-and-repeatedly-reconnects-to-peripheral),但就我而言,这种情况甚至会发生未安装 Spotify.

可以可靠地重现这一点的设备是:

  • 谷歌像素,安卓 8.1
  • LG Nexus 5X,安卓 7.1.2
  • 三星盖乐世 S7,安卓 7.0
  • 三星盖乐世 S6,安卓 6.0

连接是短暂的,持续约 3 秒。我可以验证是否已建立连接,因为外围设备提供了其连接的视觉指示和日志输出。

我对可能导致重复重新连接的原因感到非常困惑,因为 BLE 堆栈的 logcat 没有提示谁或什么导致了连接。在运行 7.1.2 的 Nexus 5X 上,蓝牙服务 (com.android.bluetooth) 一个连接/断开连接周期的 logcat 输出如下所示:

05-15 10:36:55.428  6397  7029 W bt_smp  : smp_br_connect_callback is called on unexpected transport 2
05-15 10:36:55.428  6397  7029 W bt_btif : bta_dm_acl_change info: 0x0
05-15 10:36:55.428  6397  7029 E bt_btif : bta_gattc_cache_load: can't open GATT cache file /data/misc/bluetooth/gatt_cache_c4be844851e9 for reading, error: No such file or directory
05-15 10:36:55.428  6397  6526 D bt_btif_dm: remote version info [c4:be:84:48:51:e9]: 0, 0, 0
05-15 10:36:55.432  6397  6526 E BluetoothRemoteDevices: state12newState0
05-15 10:36:56.141  6397  7029 W bt_bta_gattc: bta_gattc_explore_srvc no more services found
05-15 10:36:56.141  6397  7029 I bt_bta_dm: bta_dm_gatt_disc_result service_id_uuid_len=2 
05-15 10:36:56.141  6397  7029 I bt_bta_dm: bta_dm_gatt_disc_result service_id_uuid_len=2 
05-15 10:36:56.142  6397  7029 I bt_bta_dm: bta_dm_gatt_disc_result service_id_uuid_len=2 
05-15 10:36:58.185  6397  7029 W bt_btif : bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0016
05-15 10:36:58.185  6397  7029 W bt_btif : bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0016
05-15 10:36:58.185  6397  7029 W bt_btif : bta_gattc_conn_cback() - cif=5 connected=0 conn_id=5 reason=0x0016
05-15 10:36:58.185  6397  7029 W bt_btif : bta_gattc_conn_cback() - cif=6 connected=0 conn_id=6 reason=0x0016
05-15 10:36:58.185  6397  7029 I bt_btm_sec: btm_sec_disconnected clearing pending flag handle:5 reason:22
05-15 10:36:58.187  6397  6526 E BluetoothRemoteDevices: state12newState1
05-15 10:36:58.199  6397  6397 D BluetoothMapService: onReceive
05-15 10:36:58.200  6397  6397 D BluetoothMapService: onReceive: android.bluetooth.device.action.ACL_DISCONNECTED

目前我的主要调试途径是在 Pixel 上刷新 AOSP 并向 BT 堆栈添加额外的日志语句。到目前为止,这个问题还没有出现在 AOSP 上(当然),这让我相信某些 3rd 方或 Google 服务可能要对此负责。

知道如何追踪这一点吗?目前只有骑行蓝牙有帮助。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接关闭且应用程序终止后,BLE 堆栈反复重新连接到外设 的相关文章

随机推荐

  • R:格式化xtable中的数字

    我有数据 transaction lt c 1 2 3 date lt c 2010 01 31 2010 02 28 2010 03 31 type lt c debit debit credit amount lt c 500 1000
  • QML 不显示 svg 图像

    我编写了一个简单的 QML ui 它使用一些 svg 图像 当我在桌面上执行该应用程序时 一切都很好 显示了 UI 以及上面的 svg 图像 当我尝试在嵌入式设备 运行嵌入式 Windows 上执行应用程序时 会出现问题 在这种情况下 会显
  • IMemoryCache 保证唯一的新密钥 .NET-Core

    我正在尝试使用Microsoft Extensions Caching Memory IMemoryCache接口 类 我需要向缓存添加一个新项目 并确保不会覆盖已保存的任何其他内容 目前 所有密钥都是自动生成和随机的 不是顺序的 如何针对
  • 获取 PostgreSQL 中两个日期之间的结果

    我有下表 id user id start date end date integer integer date date Fields start date and end date持有日期值 例如YYYY MM DD 该表中的条目可能如
  • 标准吉他歌词/和弦包围的正则表达式

    我正在尝试在为吉他 歌词格式化的标准文本文档中的和弦周围添加方括号 以使它们与 OnSong 应用程序更兼容 我有规则 但不明白如何匹配所有可能的组合 规则是 和弦将以单个大写 A G 开头 如果大写 A G 后跟空格 换行符 b m su
  • java中的绿色线程和本机线程[重复]

    这个问题在这里已经有答案了 绿色线程和本机线程有什么区别 为什么叫绿色 本土呢 我是编程世界的新手 我喜欢学习java 在浏览 java 线程面试问题时 我发现了这一点 我听说过线程 但没有听说过这些绿色和原生的 我仔细研究了绿色线程和本机
  • stripe 登录 zsh:未找到命令:stripe

    我正在跟进条纹文档 https stripe com docs stripe cli install当我去stripe login在步骤 2 中 我收到以下错误 zsh 找不到命令 条带 我已经执行了步骤 1 安装 stripe CLI 为
  • WPF:如何让单选按钮显示为水平行的切换按钮

    我目前正在构建一个将在触摸面板中使用的用户界面 因此 我想将任何单选按钮组显示为切换按钮的水平行 我已经弄清楚如何显示 ToggleButtons 而不是标准项目符号项目
  • 禁用缓存 YouTube 视频

    当 YouTube 使 YouTube 视频与缓存一起使用时 YouTube 取得了相当大的成就 然而 这导致我的 ajax 网站出现问题 我想知道是否有办法禁用 YouTube 视频的缓存 特别是在 Internet Explorer 中
  • 解码 PKCS#12 文件

    我正在寻找在 NET 中解码 PKCS 12 文件的方法 我需要提取私钥和任何证书 以便我可以以编程方式访问以下内容 modulus 公共指数 私人指数 prime1 prime2 指数1 指数2 系数 我需要此信息 以便我可以成功使用 P
  • 从 Facelets 错误页面引用 CDI 托管 bean

    我很难尝试让通用错误页面在使用 JSF 2 Facelets 和 CDI 的 非常简单的 WAR 项目中工作 我的应用程序服务器是 WebLogic 12c 它应该支持所有这些开箱即用的功能 但它无法显示错误页面 当我将完全相同的 WAR
  • 监控 AppFabric 缓存

    我在 3 台服务器 AppFabric 1 1 上设置了高度可用的 AppFabric 缓存 我想监视每台服务器上的本地缓存 如果它因任何原因而关闭 则将其启动备份 Problem 问题是权限 我编写了一个 Powershell 脚本来执行
  • 从 php 中的日期时间获取年/月/日?

    I used date w timestamp and date w timestamp 要知道这一天 date n timestamp 几个月等 现在我正在使用日期时间 我想知道从日期时间获取一天 一个月等的等效函数是什么 PS 我知道我
  • ServiceBus RetryExponential 属性含义

    我很难理解与 QueueClients 结合使用的 RetryExponential 类 我也假设 SubscriptionClients 属性已列出here http msdn microsoft com en us library wi
  • Grails:当我向 message.properties 添加新属性时出现 Native2ascii 错误

    当我在运行时向 grails 应用程序中的 message properties 文件添加新属性时 出现了一个奇怪的错误 当我通过命令行重新启动应用程序或重新启动STS时 此错误消失 我使用的是 2 0 1 版本 直到一周前 我还能够在运行
  • 向 WooCommerce 单一产品页面添加多个选项卡

    我正在尝试向 WooCommerce 添加三个自定义选项卡 我有下面的代码 其中两个显示 但由于某种原因 属性描述选项卡没有显示在页面上 不仅 数量定价 选项卡不显示其描述 我尝试将代码的不同部分移动到不同的位置 并且检查了代码是否有错误或
  • 如何使用 ggplot 显示多个显示分布的箱线图

    我正在尝试获取这样的图表来显示每个年龄组的箱线图分布 But instead my plot looks like this 如何显示箱线图而不是点 为什么我的 Y 轴不是数字 My data looks like this 这是我正在尝试
  • DPI 意识真的需要吗?

    我正在学习如何使用 GDI GDI 绘制 GUI 我发现了这个http msdn microsoft com en us library windows desktop dd756596 v vs 85 aspx step 2 declar
  • 如何删除系统命名空间中的 kubernetes pod(和其他资源)

    我错误地在系统命名空间 kube system 中添加了一个 pod 然后我无法删除这个 Pod 它似乎还创建了一个副本集 每次删除这些项目时 都会重新创建它们 似乎找不到删除属于系统命名空间 kube system 的 Pod 或副本集的
  • 连接关闭且应用程序终止后,BLE 堆栈反复重新连接到外设

    我有一个应用程序 它打开与 BLE 设备的短暂连接 执行一些特征读取和写入 然后断开并关闭连接 应用程序使用 autoReconnect false 并且设备未配对或绑定 我看到 Android 的一些非常奇怪的行为 它似乎反复且意外地重新