Ich versuche, eine Verbindung zu einem Bluetooth-Gerät in meiner Android-Anwendung, aber ich habe ein Problem. Es sieht so aus, als ob ich beim ersten Versuch nie eine Verbindung zum Bluetooth-Gerät herstellen kann.Android-Bluetooth-Verbindung kann nicht beim ersten Versuch festgestellt werden
Ich habe den folgenden Code in der BluetoothConnectThread:
public class BluetoothConnectThread extends Thread {
private BluetoothSocket mmSocket;
private BluetoothDevice mmDevice;
private Context context;
private BluetoothManager manager;
public BluetoothConnectThread(BluetoothDevice mmDevice, UUID uuid, Context context, BluetoothManager manager) {
this.context = context;
this.manager = manager;
this.mmDevice = mmDevice;
this.uuid = uuid;
}
public void run() {
try {
System.out.println("Try to connect");
mmSocket = (BluetoothSocket) mmDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(mmDevice, Integer.valueOf(1));
mmSocket.connect();
} catch (Exception connectException) {
connectException.printStackTrace();
try {
mmSocket.close();
System.out.println("Couldn't establish Bluetooth connection! (1)");
} catch (IOException closeException) {
closeException.printStackTrace();
System.out.println("Couldn't establish Bluetooth connection! (2)");
}
try {
System.out.println("Try to connect again");
mmSocket = (BluetoothSocket) mmDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(mmDevice, Integer.valueOf(1));
mmSocket.connect();
} catch (Exception connectException2) {
connectException.printStackTrace();
try {
mmSocket.close();
System.out.println("Couldn't establish Bluetooth connection! (3)");
} catch (IOException closeException) {
closeException.printStackTrace();
System.out.println("Couldn't establish Bluetooth connection! (4)");
}
}
}
if(mmSocket.isConnected()) {
if(mmSocket.isConnected()) {
System.out.println("Connected");
//Do something with the connected socket
ich folgendes Protokoll erhalten, wenn die Lauf Methode aufrufen:
07-12 14:17:10.906 9941-10518/com.example.niekdewit.test I/System.out: Try to connect
07-12 14:17:10.910 9941-10518/com.example.niekdewit.test W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:573)
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:550)
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:325)
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test W/System.err: at com.example.niekdewit.test.BluetoothConnectThread.run(BluetoothConnectThread.java:33)
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test I/System.out: Couldn't establish Bluetooth connection! (1)
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test I/System.out: Try to connect again
07-12 14:17:13.025 9941-10518/com.example.niekdewit.test W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
07-12 14:17:13.147 9941-9941/com.example.niekdewit.test I/Timeline: Timeline: Activity_idle id: [email protected] time:762005544
07-12 14:17:16.503 9941-9941/com.example.niekdewit.test I/Timeline: Timeline: Activity_idle id: [email protected] time:762008901
07-12 14:17:17.279 9941-10518/com.example.niekdewit.test I/System.out: Connected
ich die 2 Zeilen versucht
ersetztmmSocket = (BluetoothSocket) mmDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(mmDevice, Integer.valueOf(1));
mit
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
Aber das funktioniert auch nicht, es erzeugt jedoch ein anderes Protokoll. Mit dieser Methode kann ich mich auch beim zweiten Versuch nicht verbinden.
07-12 14:27:15.968 15135-15622/com.example.niekdewit.test I/System.out: Try to connect
07-12 14:27:15.969 15135-15622/com.example.niekdewit.test W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
07-12 14:27:18.205 15135-15622/com.example.niekdewit.test W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
07-12 14:27:18.205 15135-15622/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:573)
07-12 14:27:18.205 15135-15622/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:550)
07-12 14:27:18.205 15135-15622/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:325)
07-12 14:27:18.205 15135-15622/com.example.niekdewit.test W/System.err: at com.example.niekdewit.test.BluetoothConnectThread.run(BluetoothConnectThread.java:36)
07-12 14:27:18.205 15135-15622/com.example.niekdewit.test I/System.out: Couldn't establish Bluetooth connection! (1)
07-12 14:27:18.206 15135-15622/com.example.niekdewit.test I/System.out: Try to connect again
07-12 14:27:18.206 15135-15622/com.example.niekdewit.test W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
07-12 14:27:18.319 15135-15135/com.example.niekdewit.test I/Timeline: Timeline: Activity_idle id: [email protected] time:762610717
07-12 14:27:20.669 15135-15622/com.example.niekdewit.test W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
07-12 14:27:20.669 15135-15622/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:573)
07-12 14:27:20.669 15135-15622/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:550)
07-12 14:27:20.669 15135-15622/com.example.niekdewit.test W/System.err: at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:325)
07-12 14:27:20.669 15135-15622/com.example.niekdewit.test W/System.err: at com.example.niekdewit.test.BluetoothConnectThread.run(BluetoothConnectThread.java:36)
07-12 14:27:20.669 15135-15622/com.example.niekdewit.test I/System.out: Couldn't establish Bluetooth connection! (3)
07-12 14:27:20.854 15135-15135/com.example.niekdewit.test I/Timeline: Timeline: Activity_idle id: [email protected] time:762613252
Als ich mit dieser Linie versuchen, eine Verbindung
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
Und versuchen Sie auf dem zweiten Versuch („versuchen Sie es erneut zu verbinden“) mit dieser Linie
mmSocket = (BluetoothSocket) mmDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(mmDevice, Integer.valueOf(1));
Dann erzeugt sie das gleiche Protokoll wie das erste Protokoll, das ich anbrachte
Ich habe keine Ahnung, was vor sich geht? Ich hoffe, einer von euch kann sehen, was mit meinem Code nicht stimmt, oder mich in die richtige Richtung weisen.
EDIT: Wenn das Gerät bereits gepaart ist, dann ist es möglich, beim ersten Versuch mit beiden Methoden zu verbinden.
EDIT2:
mmSocket = mmDevice.createInsecureRfcommSocketToServiceRecord(uuid);
auch nicht
funktioniert
Danke für Ihre Antwort, aber das hat mein Problem nicht behoben. Das Ausgabe-Protokoll ist das gleiche wie mein erstes Protokoll, das ich an meinen Post angehängt habe :( – Niek
Sie haben einen Bluetooth-Manager definiert, aber Sie verwenden ihn nicht. Ich könnte mir das ansehen, da Sie einen Fehler von 'W/bekommen. BluetoothAdapter: getBluetoothService() angerufen ohne BluetoothManagerCallback' –
Bluetooth Manager ist eine Klasse, die ich selbst geschrieben habe, die als Schnittstelle für die Aktivität dient, um eine Bluetooth Verbindung usw. herzustellen gemacht worden: – Niek