La mejor práctica para transmitir datos en tiempo real desde Android a Bluetooth

Tengo una aplicación de Android que escribe datos en un bluetooth simblee.

Debajo del código que tengo:

public void sendData(String data) {
    Utils.addLog(TAG,"sending data : " + data);
    if (mSerialCharacterstic == null) {
        Utils.addLog(TAG,"serial characteristic not found yet!");
        return;
    }

    Utils.addLog(TAG,"starting write data...");
    mSerialCharacterstic.setValue(data);
    Utils.addLog(TAG,"writing : " + data);
//        mGatt.beginReliableWrite();
        mGatt.writeCharacteristic(mSerialCharacterstic);
    }

/ ******************* /

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {

            Utils.addLog(TAG,"onCharacteristicWrite : " + new String(characteristic.getValue()) + " status : " + status);

//            gatt.executeReliableWrite();

    Utils.addLog(TAG,"data written");
    super.onCharacteristicWrite(gatt, characteristic, status);
}

Todo funciona correctamente (confiableWrite no funcionaba por alguna razón, pero eso es por otra pregunta)

Ahora si quiero transmitir datos (por ejemplo, evento onTouch, envíe el led a la luz en tiempo real)

La única solución que funciona conmigo es guardar los datos para transmitirlos en una lista de arrays yOnCharacteriticWrite envíe los siguientes datos para enviar.

        @Override
        public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
                Utils.addLog(TAG,"onCharacteristicWrite : " + new String(characteristic.getValue()) + " status : " + status);

//            gatt.executeReliableWrite();
            Utils.addLog(TAG,"data written");

            if (isStreaming && streamQueue.size() > 0) {
                streamQueue.remove(0);
                Utils.addLog(TAG,"item removed");
                Utils.addLog(TAG,"stream size : " + streamQueue.size());
                if (streamQueue.size() > 0) {
                    Utils.addLog(TAG,"streaming next item");
                    sendData(streamQueue.get(0));
                }
                else {
                    Utils.addLog(TAG,"no more items to stream");
                    didSendFirstSet = false;
                }
            }

            super.onCharacteristicWrite(gatt, characteristic, status);
        }

Esto está funcionando para mí, pero estoy seguro de que debe haber una forma más confiable de enviar la tuerca de datos. No pude encontrar ninguna documentación adecuada para ello (en mi código, cualquier error que ocurra durante la transmisión detendrá toda la transmisión)

Respuestas a la pregunta(0)

Su respuesta a la pregunta