BluetoothServerSocket-Annahme schlägt fehl und löst eine IOException aus

Ich habe ein Gerät, das das OBEX Object Push Profile unterstützt. Dieses Profil basiert auf dem Serial Port Profile. Ich vermute, dass ich das Android Bluetooth Chat-Beispiel verwenden kann, um dieses Gerät mit meinem Android Phone zu verbinden. Aber ich bin auf ein Problem gestoßen, was das betrifftsocket.accept() Funktionalität im Android SDK. Ich versuche, mein Telefon folgendermaßen mit diesem Gerät zu verbinden:

adapter = BluetoothAdapter.getDefaultAdapter(); 
device = adapter.getRemoteDevice("00:1B:DC:0F:EC:7E");

AcceptThread = new AcceptThread(true, adapter, device);
AcceptThread.start(); 

Der Konstruktor in AcceptThread ist folgendermaßen codiert:

public AcceptThread(boolean secure, BluetoothAdapter adapter, BluetoothDevice device) {
    BluetoothServerSocket tmp = null;
    this.adapter = adapter;
    this.device = device;

    // Create a new listening server socket
    try {
        tmp = adapter.listenUsingInsecureRfcommWithServiceRecord(device.getName(), UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
    } catch (Exception e) {
        Log.e(TAG, ".AcceptThread # listen() failed", e);
    } 
    mmServerSocket = tmp;
}

Das Problem ist, wenn ich versuche, eineconnect() Wie ich bereits gesagt habe

public void run() {
    BluetoothSocket socket = null;

    // Listen to the server socket if we're not connected
    while (mState != STATE_CONNECTED) {
        try {
            // This is a blocking call and will only return on a
            // successful connection or an exception
            Log.d(TAG, "AcceptThread.run: accepting server socket connection");

            socket = mmServerSocket.accept(20000); 

            Log.d(TAG, ".AcceptThread.run # server socket connection accepted");
        } catch (Exception e) {
            Log.e(TAG, ".run # accept() failed: "+e);
            break;
        }
    }
}

Wie Sie sehen, akzeptiert der ServerSocket jede eingehende Verbindung für20 seconds oder20000 ms. Wenn die Zeit abgelaufen ist, wird die App eine solche IOException auslösen

07-11 10:30:08.355: E/SIMPLECONNECT(1301): .run # accept() failed: java.io.IOException: Connection timed out

was mir sagt, dass mein Gerät keine Verbindung zu meinem Android-Handy herstellen konnte. Das Gerät verfügt nicht über eine Verbindungstaste auf dem Display, sondern nur über eine Sendefunktion, mit der eine Datei an mein Telefon gesendet wird. Ich glaube, dass diese Sendefunktion auch eine Verbindung im Hintergrund herstellt, bin mir aber nicht sicher.

Kann jemand irgendwelche Lösungen für mich finden? Ich starte meine App auf einemSamsung Galaxy SIII mitAndroid 4.0.4

Antworten auf die Frage(1)

Ihre Antwort auf die Frage