Как мы можем восстановить, если пользователь отключает / включает Bluetooth во время работы нашего приложения?
У нас есть приложение, которое подключается по Bluetooth без обнаружения Bluetooth, так как мы уже знаем MAC-адреса Bluetooth.На стороне сервера выполняется циклическое выполнение метода accept () на BluetoothServerSocket, а на стороне клиента используется connect () на BluetoothSocket.Соединения сокетов, как правило, недолговечны, и обычно все работает нормально.
Это все работает на паре телефонов Nexus One, работающих под управлением 2.3.3.Некоторые другие телефоны, например Sprint HTC Evo с 2.3.3, похоже, не поддерживают этот стиль подключения, даже если он описан в документации для разработчиков Android.Ни один из телефонов не рутирован.
Во время работы нашего приложения, если телефоны переместились из-за близости Bluetooth, а затем снова близко друг к другу, они временно не могут подключиться, но затем начинают подключаться снова, все из которыхимеет смысл.
Во время работы нашего приложения, если пользователь заходит в настройки и отключает Bluetooth, мы больше не можем подключиться, что имеет смысл.Однако когда пользователь снова включает Bluetooth, метод accept () зависает навсегда.Это верно независимо от того, была ли функция accept () активна во время отключения Bluetooth.(У нас есть код, чтобы избежать вызова accept, если BluetoothAdapter.isEnable имеет значение false.)
Мы попытались выйти из метода accept (), закрыв сокет из другого потока и затем восстановив сокет BluetoothServerSocket, но затем мы получим "«Невозможно зарегистрировать запись SDP», когда мы вызываем BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord (), даже если мы закрыли предыдущий сокет, а в документах говорится, что close освобождает все ресурсы.В конце концов, нам нужно перезапустить наше приложение, чтобы все заработало.
Итак ... что должно произойти, если пользователь изменит включение Bluetooth во время работы приложения?
Есть лиМожно ли как-нибудь восстановить наше приложение и начать принимать соединения Bluetooth?
Кажется, что клиентская сторона без проблем справляется с перебоями.
Спасибо!