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() 有啥作用?

如何释放(gc)bluetoothgatt实例?

如何为所有连接的设备同时执行 BluetoothGatt 读写请求?

BluetoothGatt在连接后返回空服务列表