关于连接设备的Android BLE GATT_ERROR(133)

时间:2015-03-06 07:33:41

标签: android bluetooth bluetooth-lowenergy android-bluetooth

我正在尝试使用MAC地址连接到BLE设备。

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(rememberedDeviceAddress)
bluetoothDevice.connectGatt(context, false, bluetoothGattCallback);

即使我的BLE设备已关闭,我也会在BluetoothGattCallback.onConnectionStateChangestatus = 133 newState = 2内收到回电。

newState = 2指的是BluetoothProfile.STATE_CONNECTED,这意味着我连接到设备并且status = 133是GATT_ERROR(而不是status = 0 SUCCESS)

我没有得到无法注册回调错误。

设备:一加一(Android 4.4)

任何可能导致此问题的指示都会有所帮助。

注意:所有设备上都不会出现问题。在使用Android 5.0的Nexus 5上,一切似乎都运行良好

请在下面找到堆栈跟踪:

03-06 13:00:11.994: D/BluetoothGatt(26771): registerApp()
03-06 13:00:11.994: D/BluetoothGatt(26771): registerApp() - UUID='uuid comes here'
03-06 13:00:12.004: D/BluetoothGatt(26771): onClientRegistered() - status=0 clientIf=5
03-06 13:00:42.004: D/BluetoothGatt(26771): onClientConnectionState() - status=133 clientIf=5 device='device id comes here'

1 个答案:

答案 0 :(得分:3)

某些设备需要在UI线程上运行蓝牙LE交互。所以我建议尝试这样的事情:

// Create handler for main thread where mContext is application context
mHandler = new Handler(mContext.getMainLooper());
...
// Connect to BLE device from mHandler
mHandler.post(new Runnable() {
@Override
public void run() {
    mBTGatt = mBTDevice.connectGatt(mContext, false, mGattCallback);
}
});

当然你也可以使用Activity.runOnUiThread。资料来源:https://stackoverflow.com/a/23478737