2015-03-06 9 views
11

Sto provando a connettermi a un dispositivo BLE utilizzando l'indirizzo MAC.Android BLE GATT_ERROR (133) sul collegamento al dispositivo

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

ottengo un callback in BluetoothGattCallback.onConnectionStateChange con status = 133 e newState = 2anche quando il mio dispositivo BLE è spento.

newState = 2 si riferisce al BluetoothProfile.STATE_CONNECTED che significa che sono collegato al dispositivo e lo status = 133 è GATT_ERROR (invece di stato = 0 SUCCESS)

non ottengo l'impossibile registrare callback errore .

dispositivo: uno più uno (Android 4.4)

Eventuali indicazioni su che cosa potrebbe causare questo problema sarebbe utile.

Nota: il problema non si verifica su tutti i dispositivi. Tutto sembra funzionare bene su Nexus 5 con Android 5.0

Di seguito riportiamo l'analisi dello stack:

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

Dai un'occhiata alla risposta suggerita per questa domanda: http://stackoverflow.com/questions/27280402/every-connection-request-is-being-treated-as-direct-connect-request-android -bl – PaulT

+0

Potresti capirlo? Ho lo stesso problema. – Borzh

risposta

3

Alcuni dispositivi richiedono interazioni Bluetooth LE per essere eseguito sul thread dell'interfaccia utente. Quindi mi sento di raccomandare di provare qualcosa di simile:

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

Naturalmente si potrebbe usare Activity.runOnUiThread pure. Fonte: https://stackoverflow.com/a/23478737