【发布时间】:2013-07-26 01:32:52
【问题描述】:
我目前正在开发一个使用蓝牙低功耗的应用程序(在 Nexus 4 上进行测试)。在开始使用 Android 4.3 中的官方 BLE API 后,我注意到在我第一次连接设备后,我很少能够再次成功连接/通信该设备或任何其他设备。
按照指南here,我可以成功连接到设备,扫描服务和特征,以及读/写/接收通知,没有任何问题。但是,断开连接并重新连接后,我经常无法扫描服务/特征或无法完成读/写。我在日志中找不到任何内容来说明为什么会发生这种情况。
一旦发生这种情况,我必须卸载应用程序、禁用蓝牙并重新启动手机,然后它才能再次开始工作。
每当设备断开连接时,我都会确保在 BluetoothGatt 对象上调用 close() 并将其设置为 null。有什么见解吗?
编辑:
日志转储:对于这些日志,我将手机植根并提高了 /etc/bluetooth/bt_stack.conf 中相关项目的跟踪级别
Successful connection - 重启手机并安装应用程序后的第一次尝试。我能够连接、发现所有服务/特征以及读/写。
Failed Attempt 1 - 这是从上述成功连接断开后的下一次尝试。似乎我能够发现特征,但第一次尝试读取返回一个空值并在此后不久断开连接。
Failed Attempt 2 - 我什至无法发现服务/特征的示例。
编辑 2:
我尝试连接的设备基于 TI 的 CC2541 芯片。我获得了一个TI SensorTag(也是基于CC2541)来玩,发现TI 昨天为SensorTag 发布了an android app。但是,这个应用有同样的问题。我在另外两台 Nexus 4 上测试了这个,结果相同:第一次或第二次连接到 SensorTag 成功,但(根据日志)失败之后发现服务,导致各种崩溃。我开始怀疑这是不是这个特定芯片的问题?
【问题讨论】:
-
请发布您手机从启动到遇到问题的完整日志。
-
我正在使用三星 Galaxy S4 并安装了泄露的 Google 版本 Android 4.3;经过多次连接/断开连接,当我发现服务时,我会随机获得 129(GATT_INTERNAL_ERROR) 并获得状态为 133 (GATT_ERROR),state = BluetoothProfile.DEVICE_DISCONNECTED 的 onConnectionStateChange。
-
有一次或两次,我在短时间内收到了多个状态 129 和 133 回调,在我重新启动设备之前,我永远无法在 BluetoothGattCallback 中收到任何回调(但扫描没问题)。
-
忘了说我正在测试大约十台使用 TI 芯片的设备(抱歉我不知道他们的型号)和一台使用 Nordic 芯片的设备。带有北欧芯片的设备从不报告错误。(但不足以证明问题是 TI 特定的)
-
我可以确认三星 Galaxy S5(G900VVRU2BOG5 和 G900VVRU2BOA8 构建版本)上仍然存在此问题。如果我从 Settings>Application Manager>>All>>Bluetooth 清除数据,它会暂时起作用。
标签: android bluetooth bluetooth-lowenergy android-bluetooth android-4.3-jelly-bean