Beiträge von herrm_no

    Danke für die Info.
    Ja das mit dem 2 mal zuweisen war ein Fehler. Das wollte ich so eigentlich gar nicht.
    Ich hab nun aber auch so wie es aussieht mein Problem gelöst.
    Ich musste den "tetheringState" noch zusätzlich in Zeile 22 und 28 abfragen. Das hatte ich total vergessen bzw. es war mir erst gar nicht bewusst.
    Hoffe mal das beim testen nicht noch was auffällt.
    Danke und Gruß


    Hallo
    ich hatte schon ein sehr ähnliches Thema dazu. Ich fand es aber besser einen neues Thema dafür zu öffnen.
    Es gibt ein Problem womit ich einfach nicht weiter komme.
    Ich habe jetzt zwei eigene Klassen für BT (on off) und Tethering (on off) geschrieben.
    Die BT Klasse funktioniert perfekt. Die Tethering Klasse eigentlich auch.
    ( es sind extra Klassen, da ich sie für ein Widget bzw. andere Tools verwenden möchte.)
    Ich habe mehrere Buttons 1) Tethering ON - funktioniert, 2) Tethering OFF - funktioniert auch. 3) Tethering Status - funktioniert nicht so ganz.
    Ich möchte in der MainActivity einfach nur durch einen Button (Tethering Status) abfragen ob Tethering ON oder Off ist (status)
    Nun das Problem welches ich nicht in den Griff kriege.
    Ich starte die App - drücke Tethering Status Button - ich bekomme den richtigen Status
    Ich drücke den Button "Tethering On" dann Button "Tethering Status" . es wird der Status Off angezeigt obwohl Tethering ON ist
    Ich muss den Tethering Status Button nochmal drücken und dann kommt der richtige Status.
    (Das selbe ist auch umgekehrt wenn ich von Tethering On auf Off umschalte. (Status ist erst on und beim zweiten drücken wieder korrekt off.
    Der Grund ist OnServiceConnected. Wenn ich mir meine Tags anschaue dann wird der OnServiceConnected (tetheringState .....) immer erst ganz am Ende ausgeführt. Und deswegen der Status erst beim nächsten Drücken richtig angezeigt.
    Die Variable "tetheringState" in der ClassTethering ist aber immer Korrekt nur die "check" variable ist beim ersten mal nicht korrekt.
    Gibt es vielleicht einen Trick oder was mach ich verkehrt.
    Gruß


    Hier mal die MainActivtiy
    Es geht eigentlich nur um diesen Code von der MainActivity. Der Rest ist wahrscheinlich nicht relevant.


    Code
    public ClassTethering classTethering = new ClassTethering(this);
    ........
    
    
    if ((view == btnTetheringState)){
                     check = classTethering.getTetheringState();
                    Toast.makeText(getApplicationContext(), "Tethering State = " + check, Toast.LENGTH_LONG).show();
    }


    Hier die Klasse ClassTethering

    Hallo,
    danke. Hatte da einen Denkfehler. Nun funktioniert es.
    Der Widget Hintergrund wird jetzt aktualisiert wenn ich in der MainActivity einen bestimmte funktion ausführe z.B. BT ON.


    Nun nur noch eine letzte für mich schwierige Frage.
    Wenn ich das Widget drücke kann ich z.B.


    Code
    int clicks = context.getSharedPreferences("sp", MODE_PRIVATE).getInt("clicks", 0);

    ausführen und diese wieder in der MainActivity abfragen.
    Das hilft mir aber in meinem Fall nicht viel.


    Gibt es einen Weg, wenn ich das Widget drücke dass ich ohne das öffnen der MainActivity bestimmte interne Methoden/Funktionen von der Main Activity ausführe. z.B. Tethering ON.
    Man muss doch den Code hoffentlich nicht zwei mal Programmieren.
    Ich könnte das ja wahrscheinlich leichter umsetzten wenn ich meinen Code für bestimmte Funktionen in einzelnen Klassen programmiert hätte das war aber in diesem Fall schlecht möglich da ich das mit dem TetheringOn nur in einer "Internen Class" von der MainActivity Class geschafft habe (anderes Forum Thema.)
    Zur zeit muss ich echt viel lernen :)
    Ich bin aber dankbar für jeden Tipp


    Gruß

    Jetzt hab ich doch noch ein Problem bei dem ich nicht weiterkomme.
    Von der Funktion würde es so funktionieren wie gewünscht.
    Die Main Activity get auf "onPause()" und der Code springt auf "onUpdate" von der WidgetActivity.
    Allerdings krieg ich es nicht hin, dass "Update = ON" zur WidgetActivity getExtraString("UPDATE") übertragen wird.
    Beim Debuggen ist der String firstString = "Null"
    Was mach ich da verkehrt ?
    MainActivity


    WidgetActivity


    Code
    @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            super.onUpdate( context, appWidgetManager, appWidgetIds );
            Intent intent =  ((Activity)context).getIntent();
            //Intent intent = ((MainActivity)context).getIntent();
    
    
            String firstString= intent.getStringExtra("UPDATE");
            }

    Hallo, ja du hast schon recht - es ist kein Icon sondern ein Layout (WidgetActivity). Das war jetzt total falsch von mir wiedergegeben.
    Das mit dem RemoteView hab ich ja auch so. Ich kann ja bei anklicken des platzierten Widgets die Farbe des Widgets ändern. Es ist ja eigentlich nicht die Farbe sondern ich ersetze in image mit grünen Rahmen durch ein image mit roten Rahmen.
    Das funktioniert ja auch. Ich verwende auch "onReceive" in der WidgetActivity. Mein Problem ist ja das ich in der MainActivity einen button drücke möchte und der das Image von dem Layout (WidgetActivity) ändert.
    Ich werde jetzt erst nochmal was mit deinem Code probieren und dann doch meinen code anhängen. Ich hab da scheinbar noch ein kleines Verständnisproblem.
    Ich melde mich heute noch oder morgen.
    Gruß

    Ich meine das Widget ICON. Das Widget ist nur ein Button der einen Befehl ausführt (z.B. Bluetooth ON/OFF) und sonst nichts.
    Es ist nicht das ICON welches die App startet.
    Das Widget Icon ändert seine Rand Farbe von Rot auf Grün beim anklicken. z.B. Bluetooth On = Grün.
    Das soll aber auch den Status ändern wenn ich z.B. in der App (MainActivity) den Button BluetoothOn drücke.
    Hier auch mal ein Bild vom Handy dazu
    Gruß

    Hallo
    es hat jetzt ein wenig lange gedauert, aber nun bin ich soweit.
    Ich habe nun eine App erzeugt mit einem Widget. Das Widget ändert beim Anklicken sein Icon (von rot auf grün)
    (Ich übertrage auch Daten vom "Widget" in meine MainActitvity über getSharedPreferences.
    > Die Anzahl wie oft ich das Widget angeklickt habe wird beim Aktivieren der MainActivity angezeigt. > das ist noch nicht das was ich zum Schluss erreichen will, reicht aber für den Test)


    Nun aber meine Hauptfrage. Wie kann ich z.B.beim anklicken eines Buttons direkt das Icon des Widgets ändern.
    Wie muss ich da vorgehen. Löst man das auch über "getSharedPreferences" oder gibt es da sinnvollerer Wege.



    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.

    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ß

    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);
            }

    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ß

    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ß



    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 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


    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ß

    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ß