BluetoothTethering / Verbindung Handy zum Auto

  • Hallo zusammen
    ich steh wieder mal vor einem Problem.
    Ich wollte mir eine einfache App basteln die bei meinem Handy (Version 6.0) die Einstellungen/Tethering/Bluetooth-Tethering aktiviert/deaktiviert.


    Ich habe mir dazu im Internet den Code runter geladen.
    Allderings verstehen tu ich ihn nicht so richtig.
    Mein grösseres Problem ist aber, daß er
    nach dem Start immer bei Zeile 44 (PTPanServuceListerner > proxy.getClass......)
    abbricht bzw. catch ... aufruft.




    Kann mir da jemand helfen ?
    Gruß herrm_no

    Code
    proxy.getClass().getMethod("setBluetoothTethering", new Class[]{Boolean.TYPE}).invoke(proxy, new Object[]{Boolean.valueOf(true)});


    Code
    catch (IllegalArgumentException e)

    BluetootTethering


    BTPanServiceListener

    Manifest

  • Hi herrm_no,
    ich habe mir das mal angeschaut und was gefunden, was ziemlich gut funktioniert. (getestet auf S8 mit Android 9)
    Leider gibt es keine offizielle API, sondern muss sich die Methoden selber besorgen. Daher kann ich dir nicht sagen für welche Android-Version das ganze funktioniert.
    Wichtig: Bluetooth muss an sein! Das kannst du ja selber noch prüfen, habe ich jetzt bei dem Beispiel außen vorgelassen.


    Android-Manifest:

    XML
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />


    MainActivity:

    Layout:


  • Hallo Xcreen
    vielen vielen Dank für den Code
    So oder zumindest so ähnlich hatte ich es auch schon probiert.
    Funktioniert leider wieder nicht bei mir.
    Bluetooth ist an.
    Ich will diesen Scheiß Fehler finden.
    Kannst du mir da bitte noch ein paar Infos geben
    a)


    Code
    Class<?> classBluetoothPan = Class.forName("android.bluetooth.BluetoothPan");


    Kannst du mir sagen wie das funktioniert. Die KLasse "android.bluetooth.BluetootPan" gibt es doch nicht. Oder hast du die noch irgendwo eingebunden.
    Ich versteh einfach nicht diese Code Zeile.
    2) Ich debugge die App und bekomme hier ein paar Infos. Kannst du mal vergleichen ob das Identisch zu deinem ist. Will sehen wo es eigentlich wirklich hängt.
    Beim letzten Bild /Code


    Code
    //Set Button Text
                    if ((Boolean) isTetheringOn.invoke(instance, null)) {
                        toggleBTButton.setText("Turn off");
                    } else {
                        toggleBTButton.setText("Turn on");
                    }
                }
                catch (Exception ex){ex.printStackTrace();}
            }

    Beim debuggen geht er immer auf die Else Abfrage ("Turn on" und danach auf catch (Exception)
    Ich hoffe man kann da was finden.
    Gruß herrm_no


  • Also ich hab jetzt mein Problem gefunden.
    Eigentlich hätte schon alles funktioniert jedoch musst ich im Manifest

    Code
    <uses-permission-sdk-23 android:name="android.permission.WRITE_SETTINGS" />


    einstellen und im
    Build.gradle


    Die targetSdKVersion von 27 auf 22 umstellen..
    Das war eigentlich der Hauptfehler. Ich habe immer ein neues Projekt erstellt und da war die TargetSDK Version immer höher als 22.
    Ich versteh allerdings immer noch nicht so recht warum es auf SDKVersion 22 und kleiner funtioniert und höher nicht mehr.
    Unabhängig welche Android Version auf dem Handy installiert ist.


    Danke aber für die Super Hilfe :)
    Gruß herrm_no

  • Hi,
    sorry für die späte Antwort, hatte am Wochenende einiges zu tun...
    Ich habe die SDK-Version selbst auf 28 und keine Probleme.


    Die Klasse android.bluetooth.BluetootPan exisitert fest im Android-System und muss deswegen nicht hinzugefügt werden.
    Da dies aber keine offizelle API Lösung ist, kann ich dir nicht genau sagen und welchen Android-Versionen es läuft.
    Soweit ich das gesehen hatte, sollte es aber eigentlich fast überall gehen.


    Hier meine Demo-App, die kannst du ja mal vergleichen. https://drive.google.com/open?…zD8gzB3tGjHxRzOqefaMfwBin

  • Jetzt hab ich aber doch noch ein Problem
    Ich habe einen Button auf der Start Seite der BT und Tethering ein und ausschaltet.
    Das funktioniert auch super gut.
    Allerdings läuft er beim
    Erste Mal : Button drücken > OnServiceConnected > ich krieg einen Toast auf den Bildschirm gemeldet - BT und Tethering sind aber dann eingeschaltet
    beim 2 Mal Button drücken BT und Tethering ist aus : OK
    beim 3 Mal Button drücken > OnServiceConnected > ich krieg zwei Toasts hintereinander > er läuft 2 mal den Code durch - BT und Tethering sind aber dann eingeschaltet
    beim 4 Mal Button BT und Tehtering ist aus: OK
    beim 5 Mal Button >OnServiceConnected > ich krieg 3 Toasts hintereinander > er läuft 3 mal den Code durch - BT und Tethering sind aber dann ein geschaltet
    usw.
    Der Code für BT ist hier natürlich nicht zu sehen. Das Problem liegt nur am Tethering
    Was kann da der Grund dafür sein.
    Ich versteh überhaupt nicht warum der BTPANServiceListener da so reagiert.
    Ich hab schon alles mögliche probiert. Immer das selbe Ergebnis.
    Auch wenn ich den Code so wie bei dir in Demo-App verwende kommt das gleiche raus (Deine Demo App hab ich leider nicht zum laufen gebracht. Das Problem geh ich aber danach noch an)
    Muss man den Listerner irgendwie zurücksetzen oder...
    Gruß


  • Ich habe gerade mal geschaut. Der BluetoothProfile.ServiceListener wird bei mir am Start einmal ausgeführt und danach reagiert er nur auf Bluetooth (an/aus) Änderungen.
    Er reagiert nicht auf Bluetooth Tethering (an/aus) Änderungen.
    Also solltest du den Listener nicht dafür verwenden Tethering-Änderungen mit zu bekommen. Ab du könnest einen Thread/Service erstellen und dort via isTetheringOn überprüfen, ob es an oder aus ist.

  • So, jetzt hab ich das Problem glaub ich gefunden.
    Ich hab jetzt mit if und while schleifen versucht meine Probleme irgendwie in den Griff zu bekommen.
    Es hat auch zum Schluss alles funktioniert. Dann hab ich zufälligerweise auf dem Handy Bildschirm beim starten meiner Software immer bei einem anderes Widget bemerkt das es das Icon von on auf off und umgekehrt wechselt.
    Das war ein anderes Tool was ich vor längerem installiert und nicht mehr dran gedacht habe. (macht eigentlich das Selbe wie meine App)
    Nach der Deinstallation hat alles so funktioniert wie es hätte sein sollen.
    Das andere Tool hat mir also dazwischen gefunkt. Jetzt läuft der BTPanServiceListener auch so wie er laufen soll.


    Endliiiiiiiich :)
    Danke für all die Hilfe
    Gruß

  • Hallo ich mische mich mal dazu.



    Also ich habe auch mal das Test Beispiel von @Xcreen getestet läuft ohne Probleme. Unter AS 3.4 und auch Gradle 5.1.1 habe aber auch die dependencies angepasst.


    In der onCreate brauchst du doch nur den Button abfragen. Oder willst du den Button gar nicht haben? Wenn ja mache dir eine Variable in der du den Status speicherst.


    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'



    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0-alpha03'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha03'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!