#android #bluetooth #nexus-s #ssp
#Android #bluetooth #nexus-s #ssp
Вопрос:
Нашему приложению необходимо программно подключить устройство Bluetooth к телефону Android. Это работает нормально на всех телефонах, на которых мы его тестировали… кроме Nexus S.
Он работал на этом телефоне, пока мы не переключились с устаревшего (PIN-код) сопряжения на более новый метод безопасного простого сопряжения (SSP).
Вот журнал, который я получаю при сбое сопряжения:
10-31 15:16:47.933: D/ShockboxBluetooth(9676): Created socket
10-31 15:16:47.953: E/BluetoothEventLoop.cpp(110): event_filter: Received signal org.bluez.Adapter:DeviceCreated from /org/bluez/254/hci0
10-31 15:16:47.953: E/BluetoothEventLoop.cpp(110): event_filter: Received signal org.bluez.Adapter:PropertyChanged from /org/bluez/254/hci0
10-31 15:16:49.187: E/BluetoothEventLoop.cpp(110): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/254/hci0/dev_00_07_80_4D_B9_00
10-31 15:16:49.566: E/BluetoothEventLoop.cpp(110): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/254/hci0/dev_00_07_80_4D_B9_00
10-31 15:16:49.593: D/BluetoothService(110): updateDeviceServiceChannelCache(00:07:80:4D:B9:00)
10-31 15:16:49.609: D/BluetoothService(110): uuid(application): 00001101-0000-1000-8000-00805f9b34fb 1
10-31 15:16:49.609: D/BluetoothService(110): Making callback for 00001101-0000-1000-8000-00805f9b34fb with result 1
10-31 15:16:49.617: I/BluetoothEventLoop.cpp(110): agent_event_filter: Received method org.bluez.Agent:OutOfBandAvailable
10-31 15:16:54.156: E/BluetoothEventLoop.cpp(110): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/254/hci0/dev_00_07_80_4D_B9_00
10-31 15:16:54.156: D/BluetoothService(110): 00:07:80:4D:B9:00 bond state 10 -> 12 (0)
10-31 15:16:54.421: I/BluetoothEventLoop.cpp(110): agent_event_filter: Received method org.bluez.Agent:OutOfBandAvailable
10-31 15:16:54.988: E/ShockboxBluetooth(9676): Could not connect to Device
10-31 15:16:54.988: E/ShockboxBluetooth(9676): java.io.IOException: Connection refused
10-31 15:16:54.988: E/ShockboxBluetooth(9676): at android.bluetooth.BluetoothSocket.connectNative(Native Method)
10-31 15:16:54.988: E/ShockboxBluetooth(9676): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204)
10-31 15:16:54.988: E/ShockboxBluetooth(9676): at com.Impakt.Shockbox.ShockboxBluetooth$ConnectThread.run(ShockboxBluetooth.java:416)
10-31 15:16:54.992: D/ShockboxBluetooth(9676): Closed socket
Это много для чтения, поэтому я сузил его (я думаю). Я считаю, что это как-то связано с линией
10-31 15:16:49.617: I/BluetoothEventLoop.cpp(110): agent_event_filter: Received method org.bluez.Agent:OutOfBandAvailable
Мы думаем, что проблема связана с NFC в nexus S …. может быть, он хочет использовать NFC для сопряжения?
Я успешно использовал createInsecureRfcommSocket
(используя отражение) для сопряжения… но тогда я не могу получать данные с устройства на сокете, созданном с listenUsingRfcommWithServiceRecord
помощью (очевидно), и мы не хотим использовать listenUsingInsecureRfcommWithServiceRecord
, потому что для этого требуется уровень API 10, и мы бы вырезали большое количество клиентов с телефонами 2.2 / 2.3.2.
Любая помощь приветствуется. Спасибо!
Ответ №1:
Я никогда не мог заставить это работать. Похоже, что некоторые телефоны Android отказываются выполнять сопряжение с использованием SSP (Nexus S). Мы решили вернуться к использованию устаревшего метода сопряжения «PIN», который работает надежно (при использовании метода «createRfcommSocket», доступ к которому осуществляется через отражение).