问题标签 [bluetooth-gatt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
17665 浏览

android - BLE的connectGatt中哪个正确的autoConnect标志?

我的目标是在低功耗蓝牙设备和手机之间建立自动连接。我按照示例代码找到了这条线

上面的代码表示false使用自动连接。但是,我在这里找到了 API ,它说

BluetoothGatt connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback, int transport) 连接到此设备托管的 GATT 服务器。

而且我还尝试了两个标志:truefalse,并且仅true有效。我正在使用版本 >= Android 5.0。代码和 API 之间有不一致的地方吗?哪个标志是正确的?如果我想进行自动连接,我需要注意什么吗?

这是我的代码

0 投票
0 回答
278 浏览

android - Android 7.1.1 上未触发 BluetoothGattCallback 的 onCharacteristicChanged

与我的 BLE 设备通信时,onCharacteristicChanged对于 Android N 之前的所有 android 版本都按预期触发。该问题仅在 Android N 上出现。

对于 Android N onCharacteristicChanged,永远不会触发。BluetoothGattCallbackAndroid Nougat 的行为方式是否发生了变化?

描述符的初始化:

0 投票
2 回答
5212 浏览

android - 连续从android应用中的ble读取数据

我想通过蓝牙在android应用程序中连续读取ble硬件的数据。连接已完成,我可以将数据从应用程序发送到 ble,但无法从 ble 读取数据。

onCharactersticChanged从 ble 获取一些数据时必须调用方法,但此回调方法未调用。我正试图通知 ble 但是



它的回报false

0 投票
0 回答
583 浏览

android - 在 BLE 设备中触摸按钮时读取通知

几天前我写过这个问题:MiBand 2 中是否可以检测到触摸?

我使用 Wireshark 发现,当我按下 MiBand 按钮时,手环会向移动设备发送一个 UUID 代码。

我修改了这个示例https://github.com/googlesamples/android-BluetoothLeGatt来捕获这个事件,例如在屏幕上显示一个 Toast。但是无论我多么努力,我都没有前进。

从未调用过 onDescriptorRead() 和 onCharacteristicRead() 方法。

如何在 Android 中使用 GATT 来捕捉这种特殊特性?非常感谢

0 投票
0 回答
121 浏览

android - BluetoothGatt api 未与棉花糖中的 ibeacon 配对

我正在尝试使用 android 中的 BluetoothGatt API 以编程方式与 Ble iBeacon 配对。我可以与 Ble iBeacon 配对到棒棒糖。但我无法在 Marshmallow 中配对(我的测试设备是 oneplus 3)。我正在使用 altbeacon 库信标扫描。

另外,我在清单文件中授予了 ACCESS_COARSE_LOCATION,ACCESS_FINE_LOCATION 权限并打开了 GPS 定位。

我在这里发送信标mac id

在这里,我正在检查粘合状态。棉花糖中的粘合状态始终没有。但小于棉花糖它工作正常。

0 投票
1 回答
1527 浏览

java - Android BLE 写入字节 [] 包括无符号值

这个问题在这里开始了,但这似乎是一个红鲱鱼!

所以,问题是,我有一个字节数组需要写入 BLE 设备。

如果我记录这个数组的输出,我会得到(注意负值):

但从理论上讲,这应该只是java对值的表示,并且不应该影响它们击中蓝牙设备时的感知值,但情况似乎并非如此

这些值是制造商要求的,因此无法更改,但是其中 2 个值超出了无符号字节/整数的范围,这似乎是设备无法识别命令的原因。

当我将此命令写入特征时,我得到成功代码 0(成功),但设备不会对命令采取行动。

所以,我的问题是,我是否以正确的方式发送它,还是应该格式化/处理字节数组以保持其中包含的感知值?

任何建议都非常感谢!!!

0 投票
1 回答
605 浏览

android - GATT_REQUEST_NOT_SUPPORTED 还有更多可用信息吗?

我正在编写一个 android 应用程序来与 BLE 设备通信。该应用程序是 iOS 版本的再版,但是任何写入请求都会在 onCharacteristicWrite 内部引发 GATT_REQUEST_NOT_SUPPORTED 响应

工作目标 C 代码

接收 GATT_REQUEST_NOT_SUPPORTED 的等效 Android/java 代码

然后

我在这里错过了什么明显的东西吗?对我来说,上面的 2 个片段本质上是一样的,但是设备不能识别 android 的,但可以识别 iOS 的。

任何想法都非常感谢!

0 投票
0 回答
2383 浏览

android - BluetoothGattCallback onConnectionStateChange 中的循环 133 状态

所以我一直无法弄清楚是什么导致了这个问题或如何解决它。我正在开发一个应用程序,它整天都与 BLE 外围设备保持连接,并从设备上的传感器收集数据。有时,设备会断开连接,当我查看 logcat 时,我只看到重新连接失败并且 BluetoothGattCallback onConnectionStateChange 回调获得 133 状态,这将只是循环。杀死应用程序,关闭和打开手机蓝牙,清除蓝牙缓存都是我们试图让设备重新连接的所有事情。我像这样连接到主线程上的设备:

此代码位于自定义设备对象中(基本上是外围地址的包装器),如果我仍然有一个实例可以再次连接,我会重用该对象。我目前正在尝试使用 BluetoothAdapter.getRemoteDevice 来获取一个新的 BluetoothDevice 实例来创建一个新的自定义设备对象并调用上面的代码。onConnectionStateChange 看起来像这样:

然后 disconnect 方法调用 bluetoothGatt 对象上的隐藏刷新方法,然后调用mBluetoothGatt.disconnect(),然后mBluetoothGatt.close(). 使用此代码,我测试的手机通常表现良好,但有时手机最初会因为超时而断开连接,然后只是 133。有时手机会重新连接到设备,但有时需要很多时间技巧(切换 bt,清除蓝牙共享应用程序的数据/缓存,终止应用程序等)以使设备重新连接,并且在极少数情况下,无论我尝试什么,设备都不会重新连接。我觉得奇怪的另一件事是,在三星 S6 和 S7 上,如果设备连接到我的应用程序,并且我关闭手机的蓝牙,然后再打开,设备无法重新连接,我只看到 133 状态. 当我重新启动手机并且我的启动接收器启动我的服务以连接到外围设备时,Nexus 5 上的类似行为。外围设备的日志没有 t 提供了任何见解,当返回 133 状态时,它甚至根本没有与设备通信。这是尝试重新连接并失败时的 logcat 日志片段:

这些日志只会循环和循环。所以寻找为什么会发生这种情况。133 表示 GATT 错误,但我应该如何以编程方式处理这个问题?我已经看到一些关于类似问题的错误报告给谷歌,但这个问题发生在我的应用程序支持的所有 android 版本上,即 5.0 及更高版本。我真的不知道该怎么处理这个问题。有时让另一个应用程序扫描蓝牙设备会让我的应用程序重新连接。仅仅通过关闭和打开蓝牙,三星手机就会陷入这个 133 错误,这真的很不幸也很烦人。我一直在尝试我能想到的一切来解决或解决这个问题,但它仍然存在。希望有人能给我一些见解。谢谢你的时间。

-编辑-

我已经更改了植根手机上的蓝牙配置文件以打印出所有蓝牙日志消息,这是从手机以 133 状态循环时开始的。但是,手机在循环出现此错误一分钟左右后最终连接到设备。但是,如果有人可以帮助理解这些,这里是蓝牙日志。我一直在放慢速度,试图查看日志来自的代码,看看我是否能弄清楚发生了什么,但绝对可以用另一双眼睛。

以下是设备成功连接时的日志,我认为可能很重要的差异在行前标有星号。

上面的ch_state在失败时为1,ch_state = 1 = GATT_CH_CLOSING,低于设备连接时,ch_state = 0 = GATT_CH_CLOSE。然后下一行显示 ch_state 变为 2,即 = GATT_CH_CONN。那么这是否意味着 BluetoothGatt 没有关闭,它正在关闭过程中?只有关闭时才能连接到设备?当断开连接发生时,BluetoothGatt.close() 会被调用两次。我将尝试让它只调用 close 一次,看看是否会改变任何东西。也许我在再次调用 connect 之前没有等待足够长的时间?

mBluetoothAdapter.startDiscovery()在单独的说明中,当我在调用之前添加时,S6 和 S7 现在在重新启动后与设备重新连接,mBluetoothAdapter.getRemoteDevice(address)然后在设备上调用 connectGatt 之前取消发现。S6 连接非常快,但 S7 需要几次尝试才能最终重新连接。不完全确定为什么会这样。

0 投票
0 回答
836 浏览

android - 在使用 NUS 服务的自定义 Android BLE 应用上接收 onclientconnectionstate() - status=133

我在连接到基于 pca10040 的板时在 Android BLE 应用程序上收到上述错误,我使用 nRF Toolbox 作为参考开发了这个应用程序。

我正在多个 Android 版本和设备上对此进行测试,其中我在 motorolla devic 或 nexus 设备(android 7)或带有 android 6 的一加一上没有任何问题。

我在使用 android 6.0.1 的 redmi 3s prime 上特别面临这个问题。在此设备上,我的连接处理程序将等待一段时间,然后抛出此错误。

我附上了测试不同设备的日志:

请建议如何解决这个问题?

0 投票
1 回答
719 浏览

c# - 使用 FromBluetoothAddressAsync 获取 ble 设备服务时出错

编辑

这是一些微软安全问题的已知问题 https://social.msdn.microsoft.com/Forums/en-US/58da3fdb-a0e1-4161-8af3-778b6839f4e1/bluetooth-bluetoothledevicefromidasync-does-not-complete-on-10015063 ?论坛=wdk

如上所述添加注册 CoInitializeSecurity 值解决了问题!

我正在尝试使用广告观察者读取 BLE 设备服务。我已经实现了在侦听器中读取的服务,代码:

问题是我无法获取 BluetoothLEDevice 对象,当我到达这一行时,它没有取回任何值,它会跳过侦听器内的下一行。注意:我已经安装了 windows creators update 并且在安装之前,功能 BluetoothLEDevice.FromBluetoothAddressAsync 已经工作。