Wie kann ich die Bildschirmdrehung von BluetoothSocket in Android beenden?

9

Ich mache eine Anwendung, die Bluetooth-Verbindung verwendet. Ich rufe Bluetooth-Verbindung in onCreate() auf und schließe sie in onDestroy() von MainActivity :

%Vor%

Die App unterstützt auch LANDSCAPE- und PORTRAIT-Modi (mit zwei verschiedenen Layouts). Wenn der Bildschirm gedreht wird, ruft das MainActivity die Funktionen onCreate() und onDestroy aufgrund des unterschiedlichen Layouts auf. Aus diesem Grund habe ich den folgenden Fehler erhalten:

%Vor%

Wie ich in der Ungültige Heap-Adresse und fatalen Signal 11 , war es von BluetoothSockets close() -Methode. Erstens denke ich, dass wir kein nahes Bluetooth brauchen, wenn wir den Bildschirm drehen, daher versuchte ich, die Methode zu verwenden, um Rotationsereignis erkennen des Telefons und ignorieren schließen, wenn die Rotation geschieht, aber es funktioniert nicht. Daher denke ich, dass wir Bluetooth bei der Bildschirmdrehung schließen müssen, aber ich habe den obigen Fehler bekommen. Ich habe keine Ahnung, wie ich das lösen kann. Könnten Sie mir helfen, dieses Problem zu lösen? Ich verwende dies Bluetooth lib mit disconnect() wie folgt:

%Vor%

Wie meine derzeitige Lösung Schlaf verwendet. Ich habe Thread.sleep (1000) vor dem Close-Socket hinzugefügt. Es funktioniert. Aber ich denke, es ist keine sehr gute Lösung.

    
Jame 18.09.2016, 14:09
quelle

4 Antworten

1

Sie dürfen KEINE Bluetooth-bezogenen Sachen innerhalb der Activity (siehe SOLID) Prinzipien verwenden. Aktivität ist nur eine Benutzeroberfläche. Sie sollten einen separaten Dienst erstellen, der unabhängig von der Benutzeroberfläche im Hintergrund ausgeführt wird und alle mit Bluetooth verbundenen Aktionen verwaltet. Von Ihrer Aktivität binden Sie an diesen Service in der onResume () -Methode und lösen Sie von ihr in onPause () -Methode. Sie können die bt-control-Schnittstelle von ServiceConnection abrufen, die beim Binden vom Service übergeben wird. Es gibt ein großartiges Bluetooth-Beispiel von Google - Ссылка . Der einzige Nachteil - es verwendet Handler für die Weitergabe von Nachrichten. Ich habe es leicht modifiziert - jetzt gibt es einen anderen Thread, der alle Statusnachrichten empfängt und Callback aufruft. Fühlen Sie sich frei, diesen Code zu verwenden: Ссылка

    
Alex Shutov 28.09.2016 12:07
quelle
0

Sie können Fragment innerhalb Ihrer Aktivität hinzufügen und setRetainInstnce dieses Fragment aufrufen, um Änderungen der Ausrichtung zu behandeln. Verschiebe deine Logik mit Bluetooth in Fragment . Sehen Sie sich an, wie Sie hier und hier .

    
Volodymyr Khodonovych 21.09.2016 15:31
quelle
0

probiere diesen Code

aus %Vor%     
subrahmanyam boyapati 21.09.2016 15:35
quelle
0

Fügen Sie dieses Tag in der Manifestdatei in das angegebene Aktivitäts-Tag ein. Nachdem Sie dieses Tag hinzugefügt haben, um sich in der Aktivität zu manifestieren, kann Activity ihren Status behalten und bei der Änderung der Ausrichtung onDestroy () wird nicht aufgerufen und der Bluetooth-Socket wird nicht geschlossen.

android: configChanges="keyboardHidden | orientation | screenSize"

    
Rahil Ali 27.09.2016 11:48
quelle