tutorial things studio low example ejemplo ble android bluetooth bluetooth-lowenergy samsung-mobile gatt

things - bluetooth low energy android example



Mientras se conecta a BLE113 desde Android 4.3, está registrando "Cliente registrado, esperando una devolución de llamada". (1)

Estoy intentando conectarme a un dispositivo BlueGiga BLE113 y a mi Samsung Galaxy S4 (Android 4.3). Puedo descubrir el dispositivo con éxito pero no puedo conectarme y descubrir servicios. Este es el registro después de presionar el botón para conectarse.

12-30 16:38:34.012: D/BluetoothGatt(11280): registerApp() 12-30 16:38:34.012: D/BluetoothGatt(11280): registerApp() - UUID=5a5ac8ad-7583-457f-ba60-373c3beaf1b2 12-30 16:38:34.022: D/BluetoothGatt(11280): onClientRegistered() - status=0 clientIf=8 12-30 16:38:34.022: I/BluetoothGatt(11280): Client registered, waiting for callback 12-30 16:38:34.022: D/BluetoothGatt(11280): onClientConnectionState() - status=0 clientIf=8 device=FF:FF:FF:FF:FF:FF

La devolución de llamada pasada al método connectGatt es siguiente.

private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { Log.i(TAG, "Trying to connect..."); if (newState == BluetoothProfile.STATE_CONNECTED) { Log.i(TAG, "Connected to GATT server."); gatt.discoverServices(); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { Log.i(TAG, "Disconnected from GATT server."); } } };


Esto es muy probablemente un problema de enhebrado. Me encontré con un problema muy similar con BLE en dispositivos Samsung Galaxy S4. Parece que la implementación de Android de Samsung maneja BLE de manera diferente que otros (el dispositivo Nexus 7 funcionó bien). Sin embargo, debe ejecutar explícitamente su método BLE connectGatt desde el hilo de la interfaz de usuario. Aquí hay un ejemplo:

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