Android: przełączanie między urządzeniami Bluetooth SPP

Mam dwie różne drukarki Bluetooth. Bixolon SPP-R200 i Fujitsu FTP-628WSL110. Mogę połączyć się z każdym z nich osobno (za pomocą Samsung Galaxy SII), drukować, rozłączać i ponownie podłączać. Jednakże, jeśli wyłączę Bixolon i spróbuję sparować się z Fujitsu (wcześniej niesparowany, Bixolon jest nadal sparowany), to nie udaje mu się połączyć z utworzonym gniazdem. Tak samo na odwrót.

Oto komunikat o błędzie:

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)

Oto kod, który wykonuje próbę połączenia, linia, która zawodzi w wyjaśnianych okolicznościach, to btSocket.connect (); - wyjątek patrz wyżej:

/** 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...
}

Używampodobnie UUID do połączeniaobie urządzenia (ale tylko jedno urządzenie jest włączone jednocześnie, nigdy nie są włączone w tym samym czasie), dobrze znany identyfikator UUID SPP z interfejsu API SDK:

00001101-0000-1000-8000-00805F9B34FB

Zastanawiam się: czy to możliwe, że potrzebuję innego UUID dla każdego urządzenia? Jeśli tak, to jaki pomysł?

questionAnswers(1)

yourAnswerToTheQuestion