Привет всем,
Я понимаю, что Android bluetooth stack (bluez) был заменен на 4.2. Несмотря на то, что они, возможно, исправили многие предыдущие проблемы, из-за необходимости поддерживать более старые версии, мне все равно нужно сражаться с ними.
Я бы высоко оценил, если кто-то справился с этими проблемами раньше и мог пролить некоторый свет.
Проблема № 1. Невозможно обнаружить сломанные сообщения (4.0 и 4.1 Android, стек Bluez bluetooth)
Приложение bluetooth подключается к нашему собственному настраиваемому SPP-устройству (мы используем стандартный UUID). Он использует службу bluetooth, которая работает на собственном процессе. Это потребовало, чтобы это приложение работало в течение нескольких часов, работая с Bluetooth.
Во время блокировки энергосбережения/блокировки приложение поддерживается в живом, когда данные поступают через Bluetooth-радио, а также я проверяю периодически с установленными аварийными сигналами, где я запрашиваю процессорное время для повторного подключения и продолжения работы (при необходимости)
Теперь; система работает нормально большую часть времени, но в некоторых редких ситуациях, когда экран заблокирован и в режиме энергосбережения, для причины, которые я не понимаю, после записи в выходной поток (bluetooth-сокет) все, кажется, проходит без обнаружения поврежденного соединения. Устройство spp все еще утверждает, что соединение и сопряжение действительны, но ничего не получают.
На стороне Android журналы показывают собственный вызов BluetoothSocket.cpp:: writeNative (предполагая, что он напрямую связан с стеклом bluetooth bluez), который просто кажется правильно записывайте байты на радио bluetooth, не сообщая о какой-либо ошибке.
фрагмент кода, который записывается в выходной поток:
public void write(byte[] bytes) {
try {
Log.d(LOGGER.TAG_BLUETOOTH," bluetooth bytes to write : "+bytes);
mmOutStream.write(bytes);
mmOutStream.flush();
Log.d(LOGGER.TAG_BLUETOOTH," bluetooth bytes written : "+bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
logcat:
D/com.our.app.bluetooth(8711): отправка байтов: [B @41e0bcf8
D/com.our.app.bluetooth(8711): байты Bluetooth для записи: [B @41e0bcf8
V/BluetoothSocket.cpp(8711): writeNative
D/com.our.app.bluetooth(8711): байты Bluetooth написаны: [B @41e0bcf8
Вопросы. Правильно ли предположить, что, помимо проверки уровня приложения и пульса, обрыв связи должен быть обнаружен при работе сокета ввода-вывода, как в этом случае? Или может ли Bluetooth-радио просто спуститься во время энергосбережения?
Проблема №2 - внезапное падение из списка спаривания.
В Android 4.0 и 4.1 устройства в некоторых случаях становятся необъяснимыми упали из списка спаривания. Даже это редко и несколько только в некоторых устройствах... это случай, когда телефон не может быть снова подключен и подключен.
Я замечаю, что устройство SPP правильно, но иногда на устройствах Android отображается сообщение "Не удалось подключиться к устройству X, неправильному PIN-коду или паролю".
Примечание. Для версий Android и lt; 4.2 мы используем небезопасные сообщения ( createInsecureRfcommSocket, из-за других проблем подключения к Android для этих версий).
Вопросы. Как часто этот пароль/пароль обновляется во время сеанса?
Это может быть ошибкой в нашем SPP-устройстве, но, возможно, это не так, идеи?
Спасибо миллиону.