Android: переключение между устройствами SPP Bluetooth
У меня есть два разных принтера Bluetooth. Биксолон SPP-R200 и Fujitsu FTP-628WSL110. Я могу подключиться к каждому из них по отдельности (используя Samsung Galaxy SII) распечатать, отключить и переподключить просто отлично. Однако, если я выключаю биксолон и пытаюсь выполнить сопряжение с Fujitsu (ранее непарным, биксолон по-прежнему сопряжен), то происходит сбой при попытке подключения к созданному сокету. То же самое наоборот.
Вот сообщение об ошибке:
07-02 13:00:11.040: E/MyApp.BluetoothConnection(9380): Failed to connect to rfcomm socket.
07-02 13:00:11.040: E/MyApp.BluetoothConnection(9380): java.io.IOException: Service discovery failed
07-02 13:00:11.040: E/MyApp.BluetoothConnection(9380): at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:406)
07-02 13:00:11.040: E/MyApp.BluetoothConnection(9380): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:217)
07-02 13:00:11.040: E/MyApp.BluetoothConnection(9380): at MyApp.BluetoothConnection.connect(BluetoothConnection.java:171)
07-02 13:00:11.040: E/MyApp.BluetoothConnection(9380): at MyApp.AbstractBluetoothPrinter.connect(AbstractBluetoothPrinter.java:34)
Вот код, который делает попытку подключения, строка, которая терпит неудачу при объясненных обстоятельствах, является btSocket.connect (); - исключение см. выше:
/** Is set in connect() */
private BluetoothSocket btSocket = null;
/** Is set prior to connect() */
private BluetoothSocket btDevice;
public boolean connect(){
try {
btSocket = btDevice.createRfcommSocketToServiceRecord("00001101-0000-1000-8000-00805F9B34FB");
if (btDevice.getName().startsWith("FTP")) {
//Special treatment for the fujitsu printer
SystemClock.sleep(1000);
}
} catch (Throwable e) {
LogCat.e(TAG, "Failed to create rfcomm socket.", e);
return false;
}
try {
// Stop Bluetooth discovery if it's going on
BluetoothHandler.cancelDiscovery();
// This fails under the described circumstances
btSocket.connect();
} catch (Throwable e) {
LogCat.e(TAG, "Failed to connect to rfcomm socket.", e);
return false;
}
// Obtain streams etc...
}
Я используюsame UUID для подключения кboth устройства (но одновременно включается только одно устройство, они никогда не включаются одновременно), хорошо известный SPU UUID из API SDK:
00001101-0000-1000-8000-00805F9B34FB
Что заставляет меня задуматься: неужели мне нужен разный UUID для каждого устройства? Если да, то какая идея?