- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有代码连接到广告自定义服务的自定义 BLE 服务器设备,然后尝试发现它提供的所有服务。
代码适用于
代码不工作
在出现故障的设备上,它通常会发现一个(两个)设备上的所有 BLE 服务,这些设备通告相同的 BLE 服务。重新启动 Android 设备和/或摆弄 wifi/bt 使其发现其他 BLE 设备上的所有服务,但不是第一个(!)。
有人知道三星设备关于 BLE 服务发现的一个突出错误吗?
拥有所有服务:
04-16 13:28:00.999: V/ScanningState(9741): onServicesDiscovered()
04-16 13:28:00.999: I/ScanningState(9741): The device has service 00001800-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service 0000180a-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service 0000180f-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba0000-c6b5-11e2-8b8b-0800200c9a66
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba0100-c6b5-11e2-8b8b-0800200c9a66
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba1100-c6b5-11e2-8b8b-0800200c9a66
缺少服务:
04-16 14:05:31.179: V/ScanningState(10710): onServicesDiscovered()
04-16 14:05:31.179: I/ScanningState(10710): The device has service 00001800-0000-1000-8000-00805f9b34fb
04-16 14:05:31.179: I/ScanningState(10710): The device has service 0000180a-0000-1000-8000-00805f9b34fb
04-16 14:05:31.179: I/ScanningState(10710): The device has service 0000180f-0000-1000-8000-00805f9b34fb
04-16 14:05:31.179: I/ScanningState(10710): The device has service f0ba0000-c6b5-11e2-8b8b-0800200c9a66
04-16 14:05:31.179: W/ScanningState(10710): Device is missing sensor service
04-16 14:05:31.179: W/ScanningState(10710): Device is missing storage service
04-16 14:05:31.179: I/ScanningState(10710): Candidate did not support required services
对于第二次(失败的)扫描,我还看到了以下日志:
04-16 14:24:26.310: D/BtGatt.GattService(2856): onGetCharacteristic() - address=00:07:80:13:14:33, status=133, charUuid=00000000-0000-0000-0000-000000000000, prop=0
04-16 14:24:26.310: D/BtGatt.btif(2856): btif_gattc_get_included_service
04-16 14:24:26.310: D/BtGatt.btif(2856): btgattc_handle_event: Event 1011
04-16 14:24:26.310: E/bt-btif(2856): No server cache available
04-16 14:24:26.310: E/BtGatt.btif(2856): bta_to_btif_uuid: Unknown UUID length 25104!
更新:
进一步调查表明,如果一次只有一个 BLE 服务设备存在,onServicesDiscovered(BluetoothGatt gatt, int status) 会返回所有 BLE 服务。下层是否存在某种资源泄漏?
最佳答案
好的,简短的回答是不要在主线程以外的任何其他线程上调用 connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)
。
如果我在连接到设备时得到了 onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
,我会缓存引用,然后在内部调用 connectGatt()
与第一个设备断开连接后的回调 onConnectionStateChange(BluetoothGatt gatt, int status, int newState)
。这导致了这个问题中描述的问题。
关于android - 蓝牙 GATT - onServicesDiscovered(BluetoothGatt gatt, int status) 不包含所有服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674227/
我正在尝试在 gatt 连接并成功发现服务后立即读取特征。但在 onCharacteristicRead gatt 回调中收到错误 15(0x0f,GATT_INSUFFICIENT_ENCRYPTI
我有代码连接到广告自定义服务的自定义 BLE 服务器设备,然后尝试发现它提供的所有服务。 代码适用于 Android 5.1 的 Nexus 5 三星 SM-T320 Android 4.4.2 ZT
我尝试通过蓝牙低功耗 GATT 模式将 android 连接到 linux。 Bluez 中有一个示例代码:btgatt-server.c ,我用它作为服务器。 Android 端为 Android
我的问题很简短 - 在 Zephyr 文档中,我找不到我的问题的答案(这让我感到惊讶)。 一个 GATT 客户端是否可以连接到多个 GATT 服务器? 现在我正在使用两块板来计算一些东西(一个作为服务
我的目标是在 Ubuntu 14.04 上使用 BlueZ 4.101(不是 BlueZ 5.X)通过 USB BLE Dongle(Cambridge Silicon Radio CSR8510 A
我编写了一个连接到心率模型的程序,但我不知道如何解释数据。以下是从第一个输出开始的示例: heart rate is : 16-40-15-04-6D-02-8C-01-0C-04-24-04-AB-
我开发了两个实现 GATT 角色的应用程序:服务器和客户端。就我而言,GATT 服务器也是 GAP 外围设备,GATT 客户端是 GAP 中心。 我可以将客户端连接到服务器/从服务器断开连接,但是当我
BLE 设备(脉搏计)的特性值始终相同。信号转到onCharacteristicChanged,但值没有改变,尝试通过不同的方式获取该值。 @Override public void onServic
我正在尝试编写一个应用程序来通过低功耗蓝牙发送消息,然后通过我的外围设备中的 UART 传递这些消息。我已经按照步骤 here应用程序扫描并成功找到设备。但是,使用 BluetoothGatt = B
我一直在研究 BT 4.x (LE) 规范,试图弄清楚这是否可能(没有配对/预兆的事件)。 如果可能的话,有没有人有洞察力(最好链接到规范)? 最佳答案 正如 Mike Petrichenko 评论的
我在这里有一个更广泛的问题,所以如果有人可以向我指出可以解释这一点的文档或文章,那就足够了。不用说,一天的谷歌搜索让我无处可去,我可以伸出援助之手。 我正在连接到 BeagleBoard使用 Blue
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我正在研究与 GATT 相关的低功耗蓝牙 (BLE) 中可用的安全类型。更具体地说,使用指定不同安全级别(低、中、高)的 gatttool 时会执行哪些操作?我的理解是BLE中的安全管理器支持4种不同
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我正在尝试在树莓派上使用 go 来查询蓝牙低功耗设备。它是功能性的,我可以连接到我想要的设备并迭代连接设备的服务和特性。现在我只是想简化事情,只是读/写我感兴趣的值。它不起作用。 代码: func o
我正在尝试构建一个使用 BluetoothLE 的 Android 应用程序。在教程中,他们使用 128 位 UUID,但我只有 16 位 UUID。我必须使用服务 UUID 和蓝牙基地创建一个新的
我正在开发一个带有 GATT 服务器的 Android Things 应用程序(Dev Preview 6.1,Raspberry Pi)。当连接的客户端应用程序断开连接时,我的设备已停止广告。但是,
我一直在尝试使用 Glucose service 从 BLE 设备读取葡萄糖测量记录.我能够成功连接到设备并在获取新记录时读取它们,但是当我请求以前记录的列表时,我收到状态为 129 的回调(“GAT
我正在开发一个与自定义蓝牙设备通信的 Android 应用程序。调用 BluetoothGatt.Disconnect() 后,我看到调用了 OnConnectionStateChange 回调,新状
我已经创建了一个 BLE GATT 服务器的 android 应用程序,但我找不到在哪里写 GATT 服务器的名称,我的意思是搜索中出现的设备名称。 我都试过了 https://github.com/
我是一名优秀的程序员,十分优秀!