Обычный способ подключения к устройству Bluetooth - это соединение.Bluetooth-соединение без сопряжения
Нам необходимо подключиться к устройству ненормально: используя только MAC-адрес Bluetooth. Мы не хотим запрашивать PIN-код.
Мы знаем, что устройство поддерживает эту технику, но мы не можем найти способ сделать это на Android.
Сокращенный код выглядит следующим образом:
String mac_address = “00:11:22:33:44:55”
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice bluetoothDevice = mBluetoothAdapter.getRemoteDevice(mac_address);
Method m = bluetoothDevice.getClass().getMethod("createRfcommSocket",
new Class[] {int.class});
BluetoothSocket socket = (BluetoothSocket) m.invoke(device, 1);
socket.connect();
Проблема заключается в том, что при socket.connect()
мы запрошен PIN-код. PIN-код не нужен для этого устройства, поэтому нам не нужно запрашивать PIN-код.
Причина мы знаем PIN-код не требуется:
- Мы производим это устройство и записать прошивку.
- Мы можем подключиться к нему с помощью программы на окнах, написанных на C#.
Как мы можем изменить код, чтобы он не запрашивал PIN-код?
[Редактировать, чтобы тест предложения в комментарии]
Мы протестировали метод createInsecureRfcommSocketToServiceRecord так:
ParcelUuid list[] = device.getUuids();
BluetoothSocket socket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(list[0].getUuid());
Тогда мы получим ошибку, как это:
I/InputDispatcher( 382): Delivering touch to current input target: action: 0x1
I/InputDispatcher( 382): Delivering touch to current input target: action: 0x1
V/BluetoothSocket.cpp(16956): initSocketNative
V/BluetoothSocket.cpp(16956): ...fd 66 created (RFCOMM, lm = 0)
V/BluetoothSocket.cpp(16956): initSocketFromFdNative
I/BluetoothPolicyService( 382): getBluetoothDataTransferAllowed
D/BluetoothUtils(16956): isSocketAllowedBySecurityPolicy start : device null
V/BluetoothService.cpp( 382): createDeviceNative
V/BluetoothService.cpp( 382): ... address =
V/BluetoothEventLoop.cpp( 382): onCreateDeviceResult
V/BluetoothEventLoop.cpp( 382): onCreateDeviceResult
E/BluetoothEventLoop.cpp( 382): onCreateDeviceResult: D-Bus error: org.bluez.Error.AlreadyExists (Already Exists)
D/BluetoothEventLoop( 382): Result of onCreateDeviceResult:1
V/BluetoothService.cpp( 382): discoverServicesNative
V/BluetoothService.cpp( 382): ... Object Path = /org/bluez/1100/hci0/dev_00_11_22_33_44_55
V/BluetoothService.cpp( 382): ... Pattern = , strlen = 0
D/FStest ( 633): check default
D/FStest ( 633): check default
Я считаю, что метод 'createInsecureRfcommSocketToServiceRecord (UUID uuid)' -> * Создает разъем RFCOMM BluetoothSocket, готовый к запустите незащищенное исходящее соединение с этим удаленным устройством, используя SDU-поиск uuid. * будет работать. Ты пробовал ? – Mackovich
@Michael. какой-либо прогресс? – lolo