BluetoothGatt 显示 10,000 个相同的服务特征
Posted
技术标签:
【中文标题】BluetoothGatt 显示 10,000 个相同的服务特征【英文标题】:BluetoothGatt showing 10,000 identical characteristics for service 【发布时间】:2015-03-21 06:32:57 【问题描述】:我有一个完全搞不懂的问题,主要是因为它的持久性。
我正在编写一个小型 android 应用程序来与我的 Bluegiga BLE113 通信。我以前连接过这个设备,但我最近做了一个 GATT 修改,它没有反映在 Android 设备上(在我尝试过的所有应用程序中 - 我从桌面和 ios 应用程序验证了我的 GATT 已更新正如预期的那样)。
我尝试关闭/打开蓝牙并重新启动我的 Nexus 7,但仍然没有。最后,我绝望了,尝试了这里提到的解决方案:https://***.com/a/22709467/992509,它使用反射来命中一个名为 refresh 的私有 BluetoothGatt 方法。
它似乎工作得很好,因为我的新服务出现了,但是我遇到的是我的服务(只有 1 个特征)显示了数百个具有相同 UUID 的特征。每次我运行我的应用程序时,相同特征的数量都会增加,甚至通过设备重启和 BT 循环。
最后,我绝望了,对我的 Nexus 进行了恢复出厂设置(这是一个测试设备,所以我不在乎)。没有解决问题,这张图片显示了我所看到的(10k 个特征):
我的 BLE113 GATT 看起来像这样:
<service uuid="deadbeef-cdcd-cdcd-cdcd-cdcdcdcdcdcd">
<description>Debugging Service</description>
<characteristic uuid="deadbeef-0000-0000-0000-000000000000" id="xgatt_debug">
<description>Debugging output</description>
<properties read="true" notify="true" />
<value length="20" />
</characteristic>
</service>
Android 代码基本上只是一个 BluetoothGatt.discoverServices()(这是我第一次看到这种情况)。
再一次,我尝试过重置 BT、重启我的 Nexus 并恢复出厂设置。此外,我已确认我的 BLE 外围设备可以通过桌面应用程序和 iOS 完全按预期工作。
我在 Nexus 7 上,运行 5.0.2,并在我的应用程序中定位 4.4。
【问题讨论】:
【参考方案1】:您正在实施黑客攻击以调用未公开可用的方法。您不知道针对您定制的固件对该方法进行了哪些修改。
该 hack 对某些人有效(如您展示的问答中所示),但不能保证在任何地方都有效。
【讨论】:
以上是关于BluetoothGatt 显示 10,000 个相同的服务特征的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript API 的 Google 地图中放置 10,000,000 个标记或折线 [关闭]
Android BluetoothGatt setCharacteristicNotification 仅设置第一个特征
BluetoothGatt.setCharacteristicNotification() 有啥作用?