BLE отправляет нежелательные данные на onLeScan - PullRequest
0 голосов
/ 07 мая 2018

Работа по Bluetooth-связи с использованием https://github.com/GitGarage/BLEMingleDroid

При получении данных я добавляю к моему реальному сообщению какой-то ненужный символ Char, ниже мой код для отправки и получения сообщения

AdvertiseData

        byte[] data = message.getBytes();
        ParcelUuid pu = ParcelUuid.fromString("0000" + asHex(message.substring(0,2).getBytes()) + "-0000-1000-8000-00805F9B34FB");
        AdvertiseData.Builder builder = new AdvertiseData.Builder();
        builder.addServiceData(pu, data);
        builder.addServiceUuid(pu);

Получение данных

@Override
    public void onLeScan(final BluetoothDevice newDevice, final int newRssi,
                         final byte[] newScanRecord) {
 String message = new String(newScanRecord);
        TextView textViewToChange = (TextView) findViewById(R.id.textView);
        String oldText = textViewToChange.getText().toString();
        String device = newDevice.getAddress();
        String rssi = "" + newRssi;

}

Я не уверен, по какой причине этот мусор добавлен к моему настоящему сообщению, любая идея?

1 Ответ

0 голосов
/ 10 мая 2018

Это не ненужные данные. scanRecord - это массив байтов, поэтому вы не можете просто преобразовать его в строку.

void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) 

scanRecord часто содержит строки, такие как объявленное имя устройства, но также содержит служебные идентификаторы и другие данные, которые необходимо проанализировать. Вам необходимо вручную проанализировать эти данные. У scanRecord будет байт, указывающий длину, байт, указывающий тип данных, затем данные. Дополнительные байты длины, типа, значения могут следовать за первым. Коды типов перечислены в документации Общий профиль доступа .

...