在某些设备上连接BluetoothGatt时,我的应用程序存在问题。
所有BLE相关代码都驻留在android Service
中,除了华为CAM-L03 外,一切正常。据报道,一些旧的三星Galaxy设备也存在问题。
我最近发现,在某些设备上,必须在UI线程上执行所有BLE通信。我写了一个快速测试应用程序,当一切都在UI线程上运行时,华为的问题就消失了。
我尝试在Handler
中使用主要循环器创建Service
:
final Context context = getApplicationContext();
Handler handler = new Handler(context.getMainLooper());
handler.post(new Runnable(){
@Override
public void run() {
BluetoothGatt gatt = device.connectGatt(context, false, callBackHandler);
…
}
});
但是仍然在连接回调中给了我GATT_ERROR 133,我有点怀疑,因为上下文是服务,而不是UI应用程序。
我在这里只看到两个选项:
我不满足于其中任何一个。还有其他我不了解的选择吗?
答案 0 :(得分:3)
我想到了问题究竟是什么以及如何解决它。我正在添加我的答案作为对连接尝试抛出的通用gatt错误(133)的另一个检查,因为我没有找到暗示同一问题。
this之类的答案导致了错误的结论。我认为这个bug早已在Android上得到修复。我收到连接失败回调的事实表明线程问题与回调被注册后无关。
我遇到的问题与我在尝试连接到BLE设备时保持蓝牙适配器扫描的事实有关。看来有些手机存在问题。
我的应用程序要求规定连续扫描服务运行的时间,我周围的所有测试手机都没有问题。华为的这种模式虽然拒绝连接。
TL; DR尝试连接前停止扫描,断开连接后,如果需要,请重新开始扫描。