Bluetooth im Projekt richtig einbingen...

  • Hallo Leute,


    ich bin gerade dabei meine ersten "richtige" App zu schreiben.
    Als Anfänger habe ich mit Hilfe von vielen Beispielen etc. meine App zusammengebastelt dass sie läuft.
    Auch die Kommunikation mit Bluetooth habe ich schon hinbekommen, aber bin mir hier nicht sicher ob das alles so richtig ist.


    Zudem habe ich nun versucht auf Orientierungswechsel des Tablets zu reagieren Aber da stürtzt meine App ab wenn ich den
    Empfang der Daten neu starten möchte.




    Die Frag ist jetzt wie binde ich das gane "Bluetooth-Zeugs" richtig in die App ein.
    Vor allem wenn ich eine andere Activity (Einstellungsfenster) starte oder
    wenn ich den Bidschirm drehe und meine MainActivity zerstört und wieder gestartet wird.






    Aber vielleicht mal von vorn, was macht die App:


    Die App soll sich sich mit einem Microkontroller über Bluetooth verbinden, und Daten (Strings) an diese sendet und empfängt.


    Im OnCreate prüfe ich ob Bluetooth überhaupt vorhanden, wenn ja dann kommt die Prüfung ob Bluetooth an ist.
    Wenn nicht wird dies gestartet. (Intent turnBTon = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);)


    Wenn Bluetooth erst aktiviert werden muss kommt ja eine Abfrage die dann ein "Callback" aufruft.


    Wenn Bluetooth aktiviert ist, wird die Verbindung aufgebaut
    Hierzu startet im Hintergrund ein AsyncTask der die Bluetoothverbindung herstellt (die Geräte sind schon gekoppelt, es muss also nur verbunden werden)




    Bei erfolgreicher Verbindung, wird ein Listener (Thread?) gestartet, welcher dann die Daten empfängt.
    Das senden von Strings ist auch kein Problem.


    Aber was mache ich nun wenn ich eine andere Activity (Eigenschaften) aufrufe, oder
    wenn ich das Tablet drehe und meine Main-Activity zerstört und wieder neu geladen wird.


    Muss ich dann die Bluetoothverbindung, den Socket und den Stream etc. schließen und später wieder aufbauen?

  • Hallo,


    mittlerweile läuft die App, allerdings bin ich mir nicht sicher ob das alles richtig ist.


    Ich kann gern mein Code auch hier auflisten, wollte aber im 1. Schritt halt erst mal fragen wie die generelle Vorgehensweise sein sollte.


    ich habe es derzeit so gelößt, dass ich im OnCreate die Verbindung aufbaue und den "Listener" starte.
    In OnDestroy wird der "Lister" und die Bluetoothverbindung beendet.


    Die Frage wäre halt, wenn nun das Tablet gedreht wird, und sich "nur" die Orientierung ändert, muss dann die Verbindung und der Listener beendet werden?


    Also hier mal der Code, der mit Bluetooth zusammenhängt.
    (aus vielen Beispielen zusammengetragen)


    OnCreate:


    Java
    protected void onStart()
        {
            if (!classCarrera.isListening && classCarrera.isBtConnected){beginListenForData();}
            if (classCarrera.Menueaufruf && classCarrera.isBtConnected){
                classCarrera.Menueaufruf=false;
                OptionenSenden();
            }
            super.onStart();
        }



    Wenn der Bluetooth-Adapter nicht aktiviert war, wird in OnCreate ja die Abfrage gestartet ob aktivieren, wenn ja wird dies hier abgefangen.

    Code
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(resultCode == RESULT_OK){
                switch (requestCode) {
                    case requCodeBluetooth:
                        verbinden();
                        break;
    ...
                }
            }
        }


    Hier der Aufruf zum Verbinden:


    der eigentliche Verbdungsaufruf läuft ja "asyncron" bzw. in einem eigenen "Thread":


    Falls Verbindung erfolgreich, wird der Listener aktiviert und einige Optionen gesendet.


    Hier nun der Listener (Verarbeitend der Daten gekürzt)


Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!