Warum verliere ich die Bluetooth-Client/Server-Verbindung?
Frage
Ich versuche, über Bluetooth eine Verbindung von einer Desktop-Anwendung (in Java geschrieben) zu einer Android-Anwendung herzustellen.
Für die Desktop-Anwendung, die ich verwende BlueCove API.
Wenn ich den Server (Desktop-Anwendung) und die Android-Anwendung starte, funktioniert die Verbindung einwandfrei.(d. h.Der Client sendet ein „Hello World“ und der Server gibt es in der Konsole aus.Aber wenn ich die Anwendung verlasse (durch Drücken der Zurück- oder Home-Taste) und zu ihr zurückkehre, scheint die Socket-Verbindung verloren zu sein.
Wie kann man prüfen, ob bereits eine Bluetooth-Buchse verbunden ist?
Ich würde gerne die Verbindung der Steckdose überprüfen, um sicherzustellen, dass keine Verbindung mehr hergestellt wird.
Was soll ich (falls es der Fall ist) in die schreiben? onPause
, onResume
Methoden?
Ich nehme an, dass in der onDestroy
Methode sollte ich den Socket schließen.
Hier ist der Quellcode des Client-Servers:
Server
Klient
Ich habe es auch mit versucht IntentFilter
um den Status der Verbindung zu überprüfen, aber es hat nicht funktioniert.
@Override
public void onCreate(Bundle savedInstanceState) {
// .....
IntentFilter filter1 = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
IntentFilter filter2 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED);
IntentFilter filter3 = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);
this.registerReceiver(mReceiver, filter1);
this.registerReceiver(mReceiver, filter2);
this.registerReceiver(mReceiver, filter3);
}
//The BroadcastReceiver that listens for bluetooth broadcasts
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
//Device found
Toast.makeText(BluetoothClient.this, "Device not found", 2).show();
}
else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
//Device is now connected
Toast.makeText(BluetoothClient.this, "Device connected", 2).show();
}
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
//Done searching
Toast.makeText(BluetoothClient.this, "Done searching", 2).show();
}
else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) {
//Device is about to disconnect
Toast.makeText(BluetoothClient.this, "Device about to connect", 2).show();
}
else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
//Device has disconnected
Toast.makeText(BluetoothClient.this, "Device disconnected", 2).show();
}
}
};
Lösung
Ich habe die beiden Quellcodedateien geändert.
Jetzt sollte es gut funktionieren.Es gibt einige kleine Fehler, wenn BT nicht vor dem Aufrufen der mobilen App geöffnet wird (es bleibt mit der Zeit zu oft hängen). Diejenigen, die diesen Client/Server verwenden möchten, sollten einen Blick darauf werfen onPause(), onResume(), onDestroy()
Funktionen.
Das Problem war, dass ich die Steckdose nicht richtig verwendet habe.
Ich hoffe, dass es für diejenigen nützlich sein wird, die eine solche Anwendung mit BT implementieren möchten.