Сопряжение устройства Bluetooth с Nexus S - PullRequest
0 голосов
/ 31 октября 2011

Наше приложение должно программно соединить устройство Bluetooth с телефоном Android.Это работает нормально на всех телефонах, на которых мы его тестировали ... кроме Nexus S.

Он работал на этом телефоне до тех пор, пока мы не переключились с устаревшего соединения (PIN-код) на более новый SecureМетод простого сопряжения (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 Ответ

0 голосов
/ 26 апреля 2012

Я никогда не мог заставить это работать. Кажется, что некоторые телефоны Android отказываются от сопряжения с использованием SSP (Nexus S). Мы решили вернуться к использованию унаследованного метода сопряжения «PIN», который работает надежно (если используется метод «createRfcommSocket», доступ к которому осуществляется через отражение).

...