андроид блютуз RFCOMM скорость передачи данных слишком низкая - PullRequest
0 голосов
/ 30 января 2019

Я разрабатываю android app для получения big file (около 4М) от другого аппаратного устройства.Устройство отправляет данные в 1382400 bps, но моя программа для Android получает только 400K.Код чтения данных находится в независимом потоке и ничего не делает, кроме чтения из InputStream и подсчета прочитанного байта.Это мой фрагмент кода:

try {
    socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
    socket.connect();
    InputStream is = socket.getInputStream();
    byte[] buf = new byte[1024];
    int byteRead ;
    while ((byteRead = is.read(buf)) > 0) {
        totalBytes += byteRead;
        Log.v(LOG_TAG, "read byte:" + totalBytes);
    }
} catch (IOExcepiton e) {
    Log.e(LOG_TAG, "Connect to bluetooth device failed.", e);
    return null;
}

Я провел много экспериментов, пытаясь выяснить проблему:

  1. Приведенный выше код работает на разных телефонах Android (с android 6.0 to android 8.0), который может получать 400K ~ 500K данных, когда отправитель отправляет 4M данные.Очевидно, что во время передачи теряется 90% данных.
  2. Если устройство-отправитель отправляет небольшой файл, не более 2K с той же скоростью, Android может получить полностью.Он начинает терять данные после первого 2K пакета.
  3. Если отправитель сохраняет тот же baudrate(1382400), но спит 50ms после каждой 1K передачи, android также может получить весь *Файл 1025 * полностью.
  4. Я передаю файл 4M с одного телефона Android на другой Android с помощью функции общего доступа по Bluetooth для Android, он занимает около 30s без потери данных.

№ 4 указывает, что Android изначально поддерживает высокоскоростную передачу (> 1Mbps), но я не могу реализовать в своем собственном коде.Удаленное устройство использует адаптер HC-06 serial к bluetooth, документ которого можно найти здесь .Документ показывает, что адаптер поддерживает скорость 1.3M бит / с в серийном режиме и bluetooth в эфире.

Я искал много статей в stackoverflow и google, больше никакой информации об андроиде bluetooth скорость передачи и низкий уровень buffer размер.

Может кто-нибудь дать мне несколько советов о том, как получитьвысокая скорость передачи в android?Большое спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019

Пожалуйста, рассмотрите использование буферизованного потока.Чтение за байтом и печать его в сообщении журнала слишком медленная.При этом вы привязываете скорость чтения байтов к скорости вашего отладочного вывода.

Этот вопрос также может быть дублирован на Последовательная передача по Bluetooth для Bluetooth Низкая скорость передачи / медленная передача

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...