Android BLE GATT_ERROR(133) on connecting to device

匿名 (未验证) 提交于 2019-12-03 02:48:02

问题:

I am trying to connect to a BLE device using the MAC address.

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

I get a callback in BluetoothGattCallback.onConnectionStateChange with status = 133 and newState = 2 even when my BLE device is switched off.

newState = 2 refers to BluetoothProfile.STATE_CONNECTED which means that i am connected to the device and status = 133 is GATT_ERROR (instead of status = 0 SUCCESS)

I do not get the Failed to register callback error.

Device : One plus one (Android 4.4)

Any pointers on what might be causing this issue would be helpful.

Note: Issue does not happen on all device. Everything seems to be working fine on Nexus 5 with Android 5.0

Please find below the stack trace:

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:

Certain devices require Bluetooth LE interactions to be run on the UI thread. So I would recommend trying something like this:

// 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); } }); 

Of course you could use Activity.runOnUiThread as well. Source: https://stackoverflow.com/a/23478737



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!