2017-07-31 612 views
1

我的应用程序在某些设备上连接到BluetoothGatt时遇到问题。Android BluetoothDevice connectGatt总是在某些设备上发生错误,并且出现错误133

所有与BLE相关的代码都在android中,一切工作正常,除了华为CAM-L03。据报道,一些旧的三星Galaxy设备也有问题。

我最近发现,在某些设备上,必须在UI线程上执行所有BLE通信。我写了一个快速测试应用程序,当UI线程中的所有东西都运行时,华为问题就消失了。

我试图创建在Service一个Handler与主尺蠖:

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应用程序支持的所有设备

我不满足这些都是。是否还有其他我不知道的选项?

+0

请尝试使用runOnUiThread来代替。 YOu需要一个Activity实例,虽然 – Zoe

+0

就是这样,我没有访问一个Activity。 – unexplored

+0

根据您运行呼叫的线程,没有什么区别蓝牙呼叫的工作方式。 Android的蓝牙API使用Android中的“活页夹”功能与蓝牙服务进行通话。错误代码133只是一个普通的错误代码,意味着它没有成功。 onConnectionChange回调中错误代码为133的最常见原因之一是连接尝试超时。 – Emil

回答

1

我觉得问题实际上是什么以及如何解决它。我添加了我的答案,作为对连接尝试抛出的通用gatt错误(133)的另一个检查,因为我没有发现对相同问题的暗示。

我被导致了一个错误的结论,如this。我认为这个bug在Android上很久就修复了。我得到连接失败回调的事实表明,由于回调被注册,线程问题是无关紧要的。

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

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

TL; DR在尝试连接之前停止扫描,断开连接后根据需要重新启动扫描。

+1

是的,我们也注意到了这一点,但只有一部手机,即华为P8 Lite。你有哪个手机发生这个问题? – Emil

+0

@Emil我在问题中提到过 - 华为CAM-L03。我认为我们在HTC设备上遇到了同样的问题,但由于我没有一个设备,我无法确认。 – unexplored

+0

哦,对不起,我错过了。无论如何,如果有人感兴趣,华为P8 Lite中的蓝牙控制器就是问题的根源。主机堆栈告诉控制器同时扫描和连接,并以成功状态回复。但是,直到您停止扫描后,它仍然无法连接。 – Emil

相关问题