Проблема со связью Bluetooth: получение искаженных аудиоданных вместо правильно проанализированных файлов в приложении AAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Проблема со связью Bluetooth: получение искаженных аудиоданных вместо правильно проанализированных файлов в приложении A

Сообщение Anonymous »

Я разрабатываю приложение для Android, которое поддерживает связь Bluetooth для отправки и получения текстовых сообщений и аудиофайлов. Процесс отправки работает нормально, и заголовки передаются правильно. Однако при получении аудиофайлов приложение неправильно анализирует данные, в результате чего в пользовательском интерфейсе чата отображаются искаженные или неожиданные сообщения.
Вот что я сделал на данный момент:< /p>
Разбор заголовка: сначала я читаю и анализирую заголовок в формате:

Код: Выделить всё

MIME:audio/mp4;SIZE:3427;NAME:voice_message.mp4
Заголовок обрабатывается правильно, и я могу извлечь тип MIME, размер файла и имя файла.
Получение двоичного аудио Данные: после анализа заголовка я переключаюсь на получение необработанных двоичных аудиоданных частями и записываю их в файл.
Замеченная проблема:
двоичные данные (содержимое аудиофайла) в некоторых случаях воспринимаются как текстовые сообщения, что приводит к искажению содержимого в пользовательском интерфейсе чата.
Мои журналы показывают следующее неожиданное поведение:
  • Заголовки анализируются и регистрируются правильно.
  • Двоичные аудиоданные регистрируются как строка, в которой отображаются поврежденные/искаженные символы.
  • Список сообщений в пользовательском интерфейсе содержит сочетание действительных заголовков и двоичных данных как текст.
Основные методы:
Получение данных:

Код: Выделить всё

private void handleIncomingData(byte[] buffer, int bytes) {
String incomingData = new String(buffer, 0, bytes);

if (!isReceivingAudio && incomingData.startsWith("MIME:")) {
// Parse header...
isReceivingAudio = true;
} else if (isReceivingAudio) {
// Write binary audio data to file...
} else {
// Handle text messages...
}
}
Запись двоичных данных:

Код: Выделить всё

    private void receiveAudioFile(String fileName, int fileSize, String mimeType) {
try (FileOutputStream fileOutputStream = new FileOutputStream(receivedFile)) {
byte[] buffer = new byte[1024];
int totalBytesRead = 0, bytesRead;
while (totalBytesRead < fileSize && (bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
}
// Broadcast success or error...
}
}
Журналы:
При получении аудиоданных в журналах правильно отображается заголовок:

Код: Выделить всё

MIME:audio/mp4;SIZE:3427;NAME:voice_message.mp4
Двоичные данные регистрируются как:

Код: Выделить всё

??????ftypmp42?????isommp42????moov????mdat???? ...
Пользовательский интерфейс отображает искаженные сообщения с примесью двоичного содержимого.
Вопросы:

[*]Как я могу гарантировать, что двоичные данные обрабатываются отдельно от текстовых сообщений во время связи Bluetooth?

[*]
Какие действия можно предпринять, чтобы правильно синхронизировать переход от обработки заголовка к записи двоичных данных?

Есть ли какие-либо распространенные ошибки при обработке смешанных данных (текстовых и двоичных) через сокеты Bluetooth, которые я могу упустить?



Подробнее здесь: https://stackoverflow.com/questions/793 ... f-properly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»