Как отправить данные по каналу Bluetooth Low Energy (BLE)?

Я могу обнаружить, подключиться к bluetooth.

Исходный код—

Подключение через Bluetooth к удаленному устройству:

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

Gatt CallBack для статуса:

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

Теперь я хочу отправить команды удаленному устройству BLE, но не знаю, как это сделать.

Как только команда отправляется на устройство BLE, устройство BLE будет отвечать, передавая данные, которые мое приложение может получить.

Solutions Collecting From Web of "Как отправить данные по каналу Bluetooth Low Energy (BLE)?"

Вам необходимо разбить этот процесс на несколько шагов, когда вы подключаетесь к устройству BLE и обнаруживаете Службы:

  1. Отображение доступных gattServices в onServicesDiscovered для вашего callback

  2. Чтобы проверить, можете ли вы написать характеристику или нет
    Проверьте наличие BluetoothGattCharacteristic PROPERTIES – я не понял, что нужно включить PROPERTY_WRITE на аппаратном уровне BLE и потратить много времени.

  3. Когда вы пишете характеристику, аппаратное обеспечение выполняет какое-либо действие, чтобы явно указать операцию (в моем случае я загорелся светодиодом)

Предположим, что mWriteCharacteristic – это BluetoothGattCharacteristic . Часть, где нужно проверить ИМУЩЕСТВО, должна выглядеть так:

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

И, чтобы написать свою характеристику:

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

Это полезные части кода, которые необходимо точно реализовать.

См. Этот проект github для реализации только с базовой демонстрацией.