Android BluetoothDevice connectGatt始终在某些设备上失败并显示错误133

时间:2017-07-31 16:03:55

标签: android bluetooth-lowenergy

在某些设备上连接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应用程序。

我在这里只看到两个选项:

  1. 列表项目不支持某些设备
  2. 将所有内容移至UI应用以支持所有设备
  3. 我不满足于其中任何一个。还有其他我不了解的选择吗?

1 个答案:

答案 0 :(得分:3)

我想到了问题究竟是什么以及如何解决它。我正在添加我的答案作为对连接尝试抛出的通用gatt错误(133)的另一个检查,因为我没有找到暗示同一问题。

this之类的答案导致了错误的结论。我认为这个bug早已在Android上得到修复。我收到连接失败回调的事实表明线程问题与回调被注册后无关。

我遇到的问题与我在尝试连接到BLE设备时保持蓝牙适配器扫描的事实有关。看来有些手机存在问题。

我的应用程序要求规定连续扫描服务运行的时间,我周围的所有测试手机都没有问题。华为的这种模式虽然拒绝连接。

TL; DR尝试连接前停止扫描,断开连接后,如果需要,请重新开始扫描。