BluetoothTethering Status abfrage

  • Hallo
    ich hab jetzt wieder man ein Problem mit den Bluetooth Tethering.
    Ich kann Bluetooth an und ausschalten und auch den Status abfragen
    Ebenso Bluetooth Tethering an und aus funktioniert.
    Ich schaffe es allerdings nicht so recht den Status von Bluetooth Tethering beim Start abzufragen.
    Ich möchte das deswegen um den Bluetooth Tethering Switch schon beim start richtig zu setzten.


    Ich habe schon vieles Probiert, komme aber auf keinen grünen Zweig.
    Das einzige wo ich den Status abfragen kann bzw was funktioniert ist in der
    Klasse BTPanServiceListenerCheck
    die Variable nowVal zeigt mir richtig True oder False an.


    Code
    nowVal = (Boolean) proxy.getClass().getMethod("isTetheringOn", new Class[0]).invoke(proxy, new Object[0]);

    Allerdings weis ich ehrlich gesagt nicht wie ich diese Info nach "onCreate" kriege.
    Oder
    Die Methode
    isBluetoothTetheringEnabled() funktioniert nicht bzw. die variable "check" gibt mir nicht den richtigen status.


    Kann mir da jemand einen Tipp geben.
    Das kann doch nicht so schwer sein. Ich probier schon seit Stunden. :S X/ ;(
    Gruß
    herrm_no





    Hier mal der Code


  • Hi,
    also in meiner Demo-App (auf dem S8) wurde der BluetoothProfile.ServiceListener direkt nach dem Start ausgeführt und ich habe dann entsprechend den Button-Text gesetzt.


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

    Das sollte doch eigentlich bei dir dann auch so funktionieren?

  • Hey
    genau das ist mein Problem. Das will bei mir einfach so nicht laufen.
    Ich werde es jetzt aber nochmal probieren.
    Ich hatte auch grössere Probleme deine App überhaupt zum laufen zu bringen und als sie dann lief hat sie nicht so funktioniert wie sie eigentlich sollte.


    Ich bin auch immer noch dabei zu lernen und bin echt sehr daran interessiert was bei dir anders läuft als bei mir.
    Ich versuch es jetzt nochmal und melde mich dann. > dauert aber wahrscheinlich bis morgen.


    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'

  • Hallo ich noch mal. Wenn ich mir deine "BTPanServiceListenerCheck" Classe anschaue hast du die wohl nicht als innere Classe in der Main. Da du dort eine static Variable hast.


    In deiner Main Classe, onCreate kann ich keinen zugriff auf deine static sate Variable erkennen.

  • Hey
    so, hab es jetzt nochmal probiert.
    Ich kapier einfach nicht so recht das Android System
    Ich hab es nun an verschiedenen Handy's ausprobiert
    1) Samsung Galaxy S3 API18
    Dein Code funktioniert
    2) LG Moto Android 8.1 API27
    Dein Code funktioniert
    3) LG G4 API23
    Dein Code funktioniert hier nicht
    Er springt nach setTetherinigOn.invoke... immer gleich auch catch


    Was kann den hierführ der Grund sein.
    @jogimuc: ja in meinem Code ist es nicht als innere Classe: Das war aber die einzige Möglichkeit wo ich zumindest den aktuellen Status von Tethering bekommen habe.


    Das Hauptproblem liegt jetzt entweder auf meinem G4 oder dem API23


    Wenn ich mir den Logcut (verbose) anschaue dann ist es vielleicht ein Problem mit "Write Settings"
    Aber was muss ich da anders machen.
    Wenn ich im Manifest die SDK23 WRITE Settings verwende ist es vom System nicht rot markiert
    verwende ich die normale "WRITE SETTINGS" permission ist es rot markiert
    Liegt da hier vielleicht mein Problem
    (Das original angehängte Manifest hat natürlich nur eins von beiden ohne das "oder")
    Ich habe beide Zeilen ausprobiert und die Fehlermeldung ist die gleiche.


    Gruß



  • Hallo also wenn es auf anderen Handys geht und nur auf dem einen nicht würde ich auf das Handy tippen. Denke das sie Hardware im Handy das Threading nicht unterstützt. An die Api glaube ich nicht ich habe es auf einen Samsung S5 mini Android 6 API 23 getestet und geht.

  • Hallo jogimuc


    doch das Tethering funktioniert schon. Wie gesagt ich kann es ja per Software ein und ausschalten.
    Und ich sehe den Status auch wenn ich es in einer
    externen BTPanServiceListenerCheck Class abfrage. Siehe ganz oben. Der Value nowVal zeigt mir immer genau den Tethering status beim Start der App an. (das funktioniert bei allen Handys)
    Das ist ja das verrückte.
    Ich hätte es ja dann so gemacht (auch wenn das vielleicht mehr ein Workaround ist), aber ich weis jetzt hier ehrlich gesagt nicht so recht wie ich den nowVal Wert in die MainActivity Class bekommen.
    Natürlich wäre es mir lieber das wirkliche "Problem" zu finden. !!!!!
    Die "State" variable spielt eigentlich keine Rolle die ist nur eine Leiche von vorherigen Tests.
    Ich gebe nicht auf :S :huh:


    Gruß

  • Hallo ich wurde sagen du zeigst noch mal deinen jetzigen Code.
    Das einzige was du austauschen oder auf was du aus der Main zugreifen kannst ist deine static Variable. Nur würde ich das anders machen und zwar würde ich die in der Main erstellen und in derBTPanServiceListenerCheck Class darauf zugreifen.

  • Danke jogimuc


    ich hab warscheinlich jetzt das Problem gefunden
    Wenn ich den unteren Code mit einbaue kommt ein Fenster wo ich Rechte für die App frei geben kann.
    Wenn ich dies dann bestätige funktioniert es.
    Ich hab allerdings noch nicht gefunden wie ich auf diese Einstellung ohne die App zugreifen kann.
    Hab schon alles in den Handy Einstellungen durchsucht.
    Krieg ich aber auch noch raus.
    Hoffentlich kommt jetzt nicht noch ein anderes Problem.


    Ich werde auch nochmal deinen Vorschlag ausprobieren.


    Man darf einfach nur nicht aufgeben. Das hat mich wirklich viele viele Stunden gekostet :sleeping:


    Danke für eure Geduld und Hilfe :P

    Code
    boolean settingsCanWrite = Settings.System.canWrite(this);
            if (!settingsCanWrite) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                startActivity(intent);
            }
  • Hier der code von Xscreen mit deinem verändert.
    ist zwar eine innere Klasse solte aber auch als eikne klasse gehen.




  • Also das liegt scheinbar an meinem Handy
    Hab jetzt auch gefunden wo die Einstellung dafür ist.
    Einstellungen öffnen / Apps / oben rechst die 3 Punkte "..." / Apps Konfigurieren / Systemeinstellung ändern / Die gewünschte App anklicken (in unserem Beispiel BlueToothTethering) / Editieren der Systemeinstellungen erlauben > ON.


    Das ist bei meinem Handy scheinbar immer automatisch auf OFF. Bei den anderen Handys und bei dir wahrscheinlich grundsätzlich auf ON.
    Vielleicht ist der Grund dafür auch die Software "Norton Mobile Security".


    Gruß

  • bei Android 8 App anklicken / App Info / Systemeinstellungen ändern
    Komisch ist nur, dass bei dem LG Handy das auch auf OFF steht und trotzdem funktioniert.


    Also das verwirrt mich jetzt immer mehr.
    Und an Norton kann es doch nicht liegen, da es dort auch installiert ist.


    Das blöde ist nur, dass man praktisch hier nicht sicher sein kann ob eine solche App bei allen Handys funktioniert.

  • Ich würde einfach mal Tippen, dass das LG G4 ROM einfach restriktiver mit solchen System-Einstellungen umgeht, als die Standard-Android Versionen.


    Ja bei Android hast du natürlich extrem viele Kombinationen aus Hardware und Software, welche das testen im Gegensatz z.B. unter iOS schwerer macht.
    Deswegen würde ich auch vor dem Veröffentlichen der App, soviele Kombinationen testen die gehen und auch Crashlytics in die App einbauen.
    Damit siehst du später ob noch Crashes auftauchen und kannst sie dann entsprechend beheben.


    Von Anti-Viren Software unter Android halte ich sowieso nichts. Die können ohnen Root-Rechte nämlich garnicht wirklich was scannen oder auslesen und entsprechend was finden.

Jetzt mitmachen!

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