Android bluetooth senden Nachricht, die erstes Mal nur arbeitet

Ich muss String-Nachricht von Raspberry PI auf Android-Gerät senden. Ich bekomme erstmal nur eine Nachricht. Danach funktioniert das überhaupt nicht. Ich verwende PYTHON-Code in Himbeer-PI. Nach dem ersten Mal ist es nicht möglich, nach einem Bluetooth-Gerät zu suchen, das diese UUID läuft. Allerdings, wenn ich neu starten Android-Anwendung – wieder funktioniert es gut zum ersten Mal. Ich benutze AcceptThread wie hier vorgeschlagen. Ich habe ConnectThread oder ConnectedThread nicht in meiner Anwendung verwendet, da ich nur eingehende Nachrichten benötige. Muss ich etwas auf Pause schließen oder zerstören. Oder muss ich etwas tun, was in dieser Seite nicht erwähnt wird?

Hier ist dieser Code:

private UUID MY_UUID = UUID.fromString("1e0ca4ea-299d-4335-93eb-27fcfe7fa848"); private AcceptThread acceptThread; private class AcceptThread extends Thread { private final BluetoothServerSocket mmServerSocket; public AcceptThread() { // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final BluetoothServerSocket tmp = null; try { // MY_UUID is the app's UUID string, also used by the client code tmp = bluetoothAdapter.listenUsingRfcommWithServiceRecord(TAG, MY_UUID); } catch (IOException e) { } mmServerSocket = tmp; } public void run() { BluetoothSocket socket = null; // Keep listening until exception occurs or a socket is returned while (true) { try { socket = mmServerSocket.accept(); } catch (IOException e) { break; } // If a connection was accepted if (socket != null) { // Do work to manage the connection (in a separate thread) manageConnectedSocket(socket); try { mmServerSocket.close(); } catch(IOException e){ } break; } } } /** Will cancel the listening socket, and cause the thread to finish */ public void cancel() { try { mmServerSocket.close(); } catch (IOException e) { } } } 

Ich bin nicht mit PI-Nachricht, nur Protokollierung einer Zeichenfolge. Wie oben erwähnt, funktioniert es zum ersten Mal:

 private void manageConnectedSocket(BluetoothSocket socket) { Log.i(TAG, "Hurray!! I am here"); //acceptThread.cancel(); } 

Hier ist der PYTHON Code in Raspberry PI:

 import sys import bluetooth uuid = "1e0ca4ea-299d-4335-93eb-27fcfe7fa848" service_matches = bluetooth.find_service( uuid = uuid ) if len(service_matches) == 0: print "couldn't find the BluetoothWithPi service" sys.exit(0) first_match = service_matches[0] port = first_match["port"] name = first_match["name"] host = first_match["host"] print "connected to \"%s\" on %s" % (name, host) sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM ) sock.connect((host, port)) sock.send("Hello from Raspberry PI!!") sock.close() 

Erstmal zeigt es die Meldung "Verbunden mit …" an. Zweites Mal zeigt es 'Kann nicht finden …' Nachricht.

One Solution collect form web for “Android bluetooth senden Nachricht, die erstes Mal nur arbeitet”

Wir müssen nur einen Code in den manageConnectedSocket- Block hinzufügen. Grundsätzlich müssen wir das acceptThread abbrechen, wenn nicht null und den Dienst neu starten:

 private void manageConnectedSocket(BluetoothSocket socket) { Log.i(TAG, "Hurray!! I am here"); // if (acceptThread != null) { acceptThread.cancel(); acceptThread = null; } // if (acceptThread == null) { acceptThread = new AcceptThread(); acceptThread.start(); } } 
Python ist die beste Programmiersprache der Welt.