Не могу передать данные между двумя устройствами в Bluetooth
Добавлено: 08 июн 2014, 13:35
Пишу приложение, которое передает звук между двумя устройствами по Bluetooth.
В activity определено устройство:
Это - устройство, к которому я коннекчусь. Также есть BroadcastReceiver, который изменяет значение device на реальное значение, когда коннектимся к удаленному устройству. Как только мы это устройство получаем, создаем сокет:
Также есть два буфера для отправки и принятия данных из потока/в поток:
Т.о. когда я нажимаю "проигрывать", я пытаюсь записать звук с микрофона в выходной поток, а на аудиотрек записать звук с входного потока:
Проблема в том, что несмотря на то, что .getOutputStream() и .getInputStream() выдают НЕ null-ы, на вызове методов write()/read() ловится NullPointerException(sentBuffer, receivedBuffer также не null-ы). Хотя в документации сказано, что они могут выдавать только:
Также, если поменять код на такой:
То звук успешно записывается и проигрывается сразу на одном и том же устройстве. А вот при передаче какая-то фигня...
Кто подскажет, что исправить?
В activity определено устройство:
Код: Выделить всё
private static BluetoothDevice device = null;Код: Выделить всё
bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(java.util.UUID.fromString(UUID_STRING));Код: Выделить всё
private static byte[] receivedBuffer = new byte[BUFFER_SIZE];
private static byte[] sentBuffer = new byte[BUFFER_SIZE];Код: Выделить всё
while (isRecording) {
try {
audioRecorder.read(sentBuffer, 0, BUFFER_AUDIO_SIZE);
bluetoothSocket.getOutputStream().write(sentBuffer);
bluetoothSocket.getInputStream().read(receivedBuffer);
audioTrack.write(receivedBuffer, 0, BUFFER_AUDIO_SIZE);
} catch (IOException e) {
} catch (NullPointerException e) {
}
}Таким образом, звук не записывается и не проигрывается на двух устройствах.IndexOutOfBoundsException if byteOffset < 0 || byteCount < 0 || byteOffset + byteCount > buffer.length.
IOException if the stream is closed or another IOException occurs.
Также, если поменять код на такой:
Код: Выделить всё
while (isRecording) {
try {
audioRecorder.read(sentBuffer, 0, BUFFER_AUDIO_SIZE);
audioTrack.write(sentBuffer, 0, BUFFER_AUDIO_SIZE);
} catch (IOException e) {
} catch (NullPointerException e) {
}
}Кто подскажет, что исправить?