¿Cómo enviar datos a través de un enlace Bluetooth Low Energy (BLE)?

Puedo descubrir, conectar con el bluetooth.

Código fuente—

Conectarse vía bluetooth al Dispositivo Remoto:

//Get the device by its serial number bdDevice = mBluetoothAdapter.getRemoteDevice(blackBox); //for ble connection bdDevice.connectGatt(getApplicationContext(), true, mGattCallback); 

Gatt CallBack para el estado:

  private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { //Connection established if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) { //Discover services gatt.discoverServices(); } else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED) { //Handle a disconnect event } } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { //Now we can start reading/writing characteristics } }; 

Ahora quiero enviar comandos al dispositivo BLE remoto pero no sé cómo hacerlo.

Una vez que el comando se envía al dispositivo BLE, el dispositivo BLE responderá transmitiendo datos que mi aplicación puede recibir.

Debe romper este proceso en unos pocos pasos, cuando se conecta a un dispositivo BLE y descubre Servicios:

  1. Mostrar los gattServices disponibles en onServicesDiscovered para su callback

  2. Para comprobar si se puede escribir una característica o no
    Compruebe para BluetoothGattCharacteristic PROPIEDADES – no me di cuenta de que la necesidad de habilitar el PROPERTY_WRITE en el hardware BLE y que desperdició mucho tiempo.

  3. Cuando se escribe una característica, ¿el hardware realiza alguna acción para indicar explícitamente la operación (en mi caso estaba encendiendo un led)

Suponga que mWriteCharacteristic es un BluetoothGattCharacteristic La parte donde comprobar la PROPIEDAD debe ser como:

 if (((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE) | (charaProp & BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE)) > 0) { // writing characteristic functions mWriteCharacteristic = characteristic; } 

Y, para escribir su característica:

 // "str" is the string or character you want to write byte[] strBytes = str.getBytes(); byte[] bytes = activity.mWriteCharacteristic.getValue(); YourActivity.this.mWriteCharacteristic.setValue(bytes); YourActivity.this.writeCharacteristic(YourActivity.this.mWriteCharacteristic); 

Esas son las partes útiles del código que necesita implementar con precisión.

Consulte este proyecto github para una implementación con sólo una demo básica.

  • Android BLE BluetoothGatt objeto permanece conectado y desencadena onCharacteristicChanged () incluso después de una llamada a desconectar ()
  • BluetoothGatt que muestra 10.000 características idénticas para el servicio
  • Cómo solucionar el error BluetoothGatt: android.os.DeadObjectException error en Android?
  • Android BLE API: GATT Notificación no recibida
  • BLE GATT onCharacteristicChanged no se llama después de suscribirse a la notificación
  • Android BluetoothGatt - estado 133 - registro de devolución de llamada
  • La devolución de llamada de Gatt de BLuetooth no funciona con la nueva API de Lollipop
  • Desactivar con fuerza el dispositivo BLE conectado a la aplicación de Android activa onConnectionStateChange con el estado 8
  • ¿Tiene la naturaleza nativa de sincronización BLE GATT de implementación de Android?
  • Android: perfil de baja energía del GATT de Bluetooth
  • BLE con Android 5.0: ¿Cómo conseguir que un dispositivo actúe como Central AND Server?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.