每个连接请求都被视为直接连接请求+ android ble

2023-11-22

我们正在编写一个 ble 应用程序,希望与我们想要连接的外设建立持久连接。出于同样的目的,每当我们失去现有连接时,我们都希望与外围设备重新连接。因此,我们作为中心的 Android 应用程序只是尝试通过调用 bluetoothdevice.connectgatt 并将 autoconnect 设置为 true 来创建新的 bluetoothgatt 对象来重新连接。

但每当我们尝试这样做时,我们的重新连接就会失败

12-02 21:47:11.865: D/BluetoothGatt(31963): onClientConnectionState() - status=133 clientIf=6 device=******** callback.

因为我们的连接请求被视为 Nexus 5 Lollipop 上的直接连接请求

这是日志

12-03 11:46:12.804: D/BluetoothGatt(6902): connect() - device: 58:EB:14:3D:2A:38, auto: true
12-03 11:46:12.804: D/BluetoothGatt(6902): registerApp()
12-03 11:46:12.804: D/BluetoothGatt(6902): registerApp() - UUID=b8f9298b-4a95-41be-80d6-22d82c498c5c
12-03 11:46:12.807: D/BtGatt.GattService(31817): registerClient() - UUID=b8f9298b-4a95-41be-80d6-22d82c498c5c
12-03 11:46:12.808: D/BtGatt.GattService(31817): onClientRegistered() - UUID=b8f9298b-4a95-41be-80d6-22d82c498c5c, clientIf=6
12-03 11:46:12.808: D/BluetoothGatt(6902): onClientRegistered() - status=0 clientIf=6
12-03 11:46:12.808: D/BtGatt.GattService(31817): clientConnect() - address=58:EB:14:3D:2A:38, isDirect=true
12-03 11:46:12.809: D/BtGatt.btif(31817): btif_get_device_type: Device [58:eb:14:3d:2a:38] type 2, addr. type 0
12-03 11:46:12.811: D/BLEManager(6902): Trying to create a new connection.

该问题已在 2016 年 5 月的 master android 分支中得到修复。关于它是否最终出现在 Nougat 中的报告不一,可能与设备有关,但它肯定仍然是 Marshmallow 中的一个错误。

由于 IBluetoothManager 和 IBluetoothGatt 类在用户代码中不可用,因此解决方法所需的反射代码很快就会变得复杂。

幸运的是,有人已经编写了一个非常小、清晰的库,它为我们完成了这个确切的例程。

https://github.com/Polidea/RxAndroidBle/blob/master/rxandroidble/src/main/java/com/polidea/rxandroidble/internal/util/BleConnectionCompat.java

使用此类,只需调用:

mBluetoothGatt = (new BleConnectionCompat(context)).connectGatt(device, autoConnect, callback)

代替

mBluetoothGatt = device.connectGatt(context, autoConnect, callback);

它对我来说效果很好。我对此没有任何功劳,这完全是uKL

另请注意,它遵循 Apache License 2.0 版权所有 2016 Polidea Sp。动物园

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

每个连接请求都被视为直接连接请求+ android ble 的相关文章

随机推荐

  • 在 Heroku 上安装私有 ssh 部署密钥

    我正在创建一个 Node js 应用程序 用作 Github 的 Web 挂钩 当推送更改时 它将自动部署某个私有存储库 为了使 webhook 应用程序尽可能高效 我想在部署时将私有存储库克隆并拉入 webhook 的 Heroku 实例
  • 在 matplotlib 颜色条中对齐刻度标签

    我有一个带有正值和负值的颜色条 这些值是自动生成的 我没有设置它们 不幸的是 减号破坏了文本的垂直对齐方式 如何将刻度标签中的所有文本向右对齐 或者在正数之前插入一个空格以使其看起来不错 您可以更改文本的对齐方式 可能需要稍微更改标签的 x
  • 为什么 Traversable 不能多次访问其元素?

    我记得在某处读过 像这样的类型不可能Traversable data Bar a Bar a deriving Show instance Functor Bar where fmap f Bar x Bar f x instance Fo
  • 如何获取数组项的类型?

    如果我有一个类型type foo Array lt name string test number gt 是否可以获取数组中值的类型 在本例中为接口 我知道有keyof要获取密钥 是否有类似的值 如果您正在寻找如何提取 name strin
  • 地图视图平滑缩放

    当我使用 MapController setZoom x 时 例如 从级别 5 缩放到 15 时 缩放执行得非常快 并且通常不会加载新级别的地图图块 这对用户来说看起来不太好 任何地图内置功能都可以将其更改为更慢的缩放 以便在达到 15 级
  • Android:编辑文本中密码的最小长度

    在android中 有没有简单的方法可以在edittext中设置最小密码长度 在 xml 中只有最大长度选项 而没有最小长度选项 设置 em 和宽度等选项来限制长度 但是什么时候设置最小长度呢 我在文档中找到了这个 DevicePolicy
  • 浮点型与双精度型

    是否存在比较 equals 两个浮点值之间将返回false如果你将它们比较DOUBLE但返回true如果你将它们与 FLOAT 进行比较 作为我的小组项目的一部分 我正在编写一些程序来比较任何给定类型的两个数值 我总共需要处理四种类型 do
  • Java 中的 double 到 long 无需转换

    我需要将 double 转换为 long 保留其二进制结构 而不是数值 只需更改类型 但保留二进制值不变 有没有一种本地方法可以做到这一点 有Double与 doubleToLongBits 和 doubleToLongRawBits Ja
  • 如何在 Hibernate 中使用唯一键而不是主键检索记录

    Using session load or session get 或任何其他方法org hibernate session 是否可以在hibernate中根据Unique列而不是PK列值获取记录 我的要求是我需要根据唯一列值而不是主键获取
  • 将 Arc 克隆为 Arc,其中 T 实现 U

    我觉得很奇怪 use std sync Arc trait Fruit struct Pear impl Fruit for Pear fn main let pear Arc new Pear let cloned Arc clone p
  • 在 Neo4j 中实现 Dijkstra 算法

    我对 Neo4j 很陌生 有人可以向我解释 请逐步 如何实现 Dijkstra 算法来找到两个节点之间的最短路径 是否可以简单地使用 Cypher 来完成它 我已经尝试过最短路径算法 但它很慢 MATCH from Location Loc
  • 为什么我不能反转 str::split 的结果?

    根据文档Split 有一个rev方法对结果的影响split在字符串上 fn main let mut length 0 let mut mult 1 for part in 1 30 split rev length mult part p
  • Eclipse p2:category.xml 和 site.xml 之间的区别

    p2 存储库创建 ant 任务 例如 eclipse publish featuresAndBundles 似乎采用指定类别信息的 site xml 或category xml 文件 我发现 eclipse 生成的 site xml 和ca
  • 圆形ViewPager。第一轮后碎片无法正常工作

    好的 所以我需要圆形 ViewPager 我真的很难实施它 现在我已经实现了它 并且就圆形滚动而言它运行良好 但我注意到一个问题 那就是 第一轮滚动片段不起作用后 我有三个片段 里面有一个按钮 按钮在第一轮有效 但当我回到第一页时按钮不起作
  • 有没有办法在 Eclipse 中自动生成 getter 和 setter?

    我正在研究一个新的Android项目 Java 并创建了一个带有大量变量的对象 由于我计划为所有这些添加 getter 和 setter 所以我想知道 是否有捷径Eclipse自动生成给定类中的 getter 和 setter 在所需类的源
  • 使用 JSONB 列内的值连接表

    有两个表 授权联系人 auth contacts userid varchar contacts jsonb contacts包含具有属性的联系人数组 contact id type discussion contact id varcha
  • 在 cmake 构建中使用 LLVM

    我正在尝试构建自己的使用 LLVM 的项目 我在官网上下载了源码和预编译包 最新版本 http releases llvm org download html 我下载了 LLVM source code Clang for Windows
  • 角度材料将 angularjs 1.5 组件加载到 $mdDialog 中

    目标 使用组件而不是使用 scope 来设置数据 没有可共享的错误 问题是对话框加载组件时未设置数据元素 屏幕截图显示了对话框的当前状态 选项卡 2 信息 中应该有一个绑定的对象 我可以使用 onComplete 事件验证对话框加载后对象
  • 如何通过两个键对 JSON 对象进行排序?

    我有一个 JSON 对象 我想先按一个键排序 然后按第二个键排序 类似于 SQL 中按两列排序 以下是我想要的 JSON 示例 GROUPID 3169675 LASTNAME Chantry 我想按 GROUPID 然后按 LASTNAM
  • 每个连接请求都被视为直接连接请求+ android ble

    我们正在编写一个 ble 应用程序 希望与我们想要连接的外设建立持久连接 出于同样的目的 每当我们失去现有连接时 我们都希望与外围设备重新连接 因此 我们作为中心的 Android 应用程序只是尝试通过调用 bluetoothdevice