Я играл с API Bluetooth для Android 2.2 (уровень API 8, HTC Desire), и у меня было приложение, подключенное к встроенному устройству Bluetooth, используя:
device.createRfcommSocketToServiceRecord(DEV_UUID);
Это сгенерировало запрос на сопряжение, как и ожидалось, однако, чтобы упростить процесс подключения, я хотел избежать взаимодействия с пользователем при сопряжении, поэтому я перешел на уровень API 10 (HTC Desire с CyanogenMod 7), чтобы я мог использовать:
device.createInsecureRfcommSocketToServiceRecord(DEV_UUID);
При тестировании это также работает так, как ожидалось (подключение без запроса пользователя на сопряжение), однако, когда я пытаюсь создать безопасный RfcommSocket под уровнем API 10, как и раньше с 2.2, я получаю исключение отказа в соединении ...
java.io.IOException: Connection refused
at android.bluetooth.BluetoothSocket.connectNative(Native Method)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204)
Насколько я могу судить, это должно работать точно так же, предлагая пользователю выполнить сопряжение?
РЕДАКТИРОВАТЬ:
Просто попробовал еще раз, используя следующий код, и результат тот же (работает для небезопасных, но не для безопасных), я попробую достать стандартное устройство 2.3 для тестирования.
try {
Method m = dev.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class } );
BluetoothSocket bs = (BluetoothSocket)m.invoke(dev, devUUID);
Log.d("TEST", "Method Invoked");
bs.connect();
Log.d("TEST", "Connected to socket");
bs.close();
Log.d("TEST", "Closed Socket");
}