Probleme beim Programm beenden

  • 4 Antworten
  • Letztes Antwortdatum
S

Stefan0171

Fortgeschrittenes Mitglied
6
Hallo Ihr kann mir evtl. einer helfen bei einem Problem welches ich mit Tasker und meiner Freisprecheinrichtung habe.
Problem: Mein Handy verbindet sich mit meiner Freisprecheinrichting wenn ich Play Music öffne. Das Funktioniert der Ausgangstask ist die Trennnung der Verbindung wenn Play Music geschlossen wird. Das passiert aber leider auch wenn Play Music in den Hintergrund geht aber die Music noch läuft. Hat einer ne idee wie ich das lösen kann das die Verbindung nur getrennt wird wenn die App tatsächlich aus ist.

Gruß
Stefan
 
Hallo,

siehe hier...

Stichwort MediaUtilities-Plugin.



Grüße, Jürgen.
 
Zufälligerweise hatte ich letztens exakt das gleiche Problem mit Blitzer.de PLUS. Bei dieser App ist das nämlich genauso. Wenn man die z.B. per Homebutton in den Hintergrund schickt, dann löst die dabei nämlich auch immer wieder diesen Ausgangs- bzw. Exit-Task aus, obwohl sie anschließend noch ganz normal im Hintergrund weiterläuft, um z.B. auch dort ganz regulär ihre Arbeit zu erledigen.

Nach diversem Herumgoogeln und anschließender "Bastelarbeit" kam dann folgende (wenigstens bei mir) durchaus gut funktionierende Lösung heraus, welche man wahrscheinlich generell in solchen Situationen anwenden kann.

Das einfache Prinzip dabei: Die eigentlichen Exit-Aktionen des Exit-Tasks (im unteren Teil von Bild1) werden nur ausgeführt, wenn die App auch tatsächlich nicht mehr existiert. Und das ist genau dann der Fall, wenn eine dementsprechende Shell-Nachfrage den Exit-Code-Wert =1 (=Nein) zurückbringt.

Siehe die Bilder 1 bis 3 im Anhang. (Wobei Bild 2 u. 3 den Punkt 2 in Bild1 nochmal genau wiedergeben, in welchem ja per Shell-Cmd gefragt wird, ob der fragliche Process noch aktive ist).

Nötig hierfür nur: Das "Secure Settings"-PlugIn (das man ja eh immer braucht), zwecks auszuführendem Shell-Cmd (unter Actions/Run Command), weil es mit Taskers "Shell ausführen" irgendwie nicht klappt.

Außerdem: In den Tasker-Einstellungen muss bei "Externen Zugriff erlauben" ein Häckchen gesetzt sein, imho um dass Secure Settings eine im Tasker für diesen Task von dir zu definierende Variable (in Bild1 u. Bild3 ist das "aVar") auch laden kann.

Im Tasker-Prog fragt man also einfach per Shell-Cmd ob diese App noch läuft (Bild3). Die Antwort liegt dann z.B. im Wert der Exit-Code-Variable vor den man dann in eine Variable speichert, die man im Tasker dafür definiert hat. Hat 'grep' in der Liste der "currently-running processes" den process-Namen deiner App gefunden, dann ist dieser Wert=0, haben die Linux-Cmds 'ps' & 'grep' nichts diesbezügliches gefunden, dann ist der Wert=1 ...und dann kann auch noch der letzte Teile des Exit-Task ausgeführt werden (Bild1). Den Process-Namen der jeweiligen App kriegt man über die App "AppXplore" heraus (in meinem Beispiel ist das "de.Blitzer.plus", was natürlich dann jeweils entsprechend ersetzt werden muss).

Da das Prog nicht eigenständig darauf wartet, bis dieser Exit-Code-Wert auch tatsächlich angefallen ist, muss ein Warten darauf extra selbst organisiert werden. Von daher auch die Konstruktion mit dem Initialwert von 9999 (der extra ein bisschen weg ist von den imo sonst nur möglichen Exit-Code-Werten 0 u. 1).


(sollte noch irgendwo ein Fehler drin sein, bitte korrigieren, thx).
 

Anhänge

  • Screenshot_2015-06-03-22-59-12.png
    Screenshot_2015-06-03-22-59-12.png
    76 KB · Aufrufe: 165
  • Screenshot_2015-06-03-22-59-22.png
    Screenshot_2015-06-03-22-59-22.png
    125,4 KB · Aufrufe: 116
  • Screenshot_2015-06-03-22-59-30.png
    Screenshot_2015-06-03-22-59-30.png
    49,9 KB · Aufrufe: 147
Zuletzt bearbeitet:
falls jemand auf secure settings verzichten möchte kann auch alternativ run shell command ps -q |grep NameProzess; echo $? verwenden (falls der name der prozess nicht genau ist z.b. nur blitzer ps | grep blitzer |grep -vq grep; echo $? verwenden, da sonst der grep befehl immer gefunden wird und 0 zurück gibt )
 
<Task sr="task90"> <cdate>1377011773681</cdate> <edate>1431630267723</edate> <id>90</id> <nme>Progcheck_variables</nme> <pri>10</pri> <Action sr="act0" ve="7"> <code>549</code> <Str sr="arg0" ve="3">%APPRUNCODE</Str> <Int sr="arg1" val="0"/> </Action> <Action sr="act1" ve="7"> <code>547</code> <Str sr="arg0" ve="3">%APPTOCHECK</Str> <Str sr="arg1" ve="3">%par1</Str> <Int sr="arg2" val="0"/> <Int sr="arg3" val="0"/> </Action> <Action sr="act10" ve="7"> <code>43</code> <ConditionList sr="if"> <Condition sr="c0" ve="3"> <lhs>%oom_adj</lhs> <op>7</op> <rhs>1</rhs> </Condition> </ConditionList> </Action> <Action sr="act11" ve="7"> <code>547</code> <label>background</label> <Str sr="arg0" ve="3">%APPRUNCODE</Str> <Str sr="arg1" ve="3">2</Str> <Int sr="arg2" val="0"/> <Int sr="arg3" val="0"/> </Action> <Action sr="act12" ve="7"> <code>548</code> <Str sr="arg0" ve="3">%APPTOCHECK %oom_adj Running in background APPRUNCODE is now 2</Str> <Int sr="arg1" val="1"/> <ConditionList sr="if"> <Condition sr="c0" ve="3"> <lhs>%FLASHING</lhs> <op>2</op> <rhs>1</rhs> </Condition> </ConditionList> </Action> <Action sr="act13" ve="7"> <code>38</code> </Action> <Action sr="act2" ve="7"> <code>123</code> <se>false</se> <Str sr="arg0" ve="3">cat /proc/$(pgrep %APPTOCHECK)/oom_adj</Str> <Int sr="arg1" val="0"/> <Int sr="arg2" val="1"/> <Str sr="arg3" ve="3">%oom_adj</Str> <Str sr="arg4" ve="3">%err</Str> <Str sr="arg5" ve="3"/> </Action> <Action sr="act3" ve="7"> <code>547</code> <Str sr="arg0" ve="3">%FLASHING</Str> <Str sr="arg1" ve="3">%par2</Str> <Int sr="arg2" val="0"/> <Int sr="arg3" val="0"/> </Action> <Action sr="act4" ve="7"> <code>37</code> <ConditionList sr="if"> <Condition sr="c0" ve="3"> <lhs>%err</lhs> <op>12</op> <rhs></rhs> </Condition> </ConditionList> </Action> <Action sr="act5" ve="7"> <code>547</code> <Str sr="arg0" ve="3">%APPRUNCODE</Str> <Str sr="arg1" ve="3">0</Str> <Int sr="arg2" val="0"/> <Int sr="arg3" val="0"/> </Action> <Action sr="act6" ve="7"> <code>548</code> <Str sr="arg0" ve="3">%APPTOCHECK not running APPRUNCODE is now 0</Str> <Int sr="arg1" val="1"/> <ConditionList sr="if"> <Condition sr="c0" ve="3"> <lhs>%FLASHING</lhs> <op>2</op> <rhs>1</rhs> </Condition> </ConditionList> </Action> <Action sr="act7" ve="7"> <code>43</code> <ConditionList sr="if"> <Condition sr="c0" ve="3"> <lhs>%oom_adj</lhs> <op>6</op> <rhs>2</rhs> </Condition> </ConditionList> </Action> <Action sr="act8" ve="7"> <code>547</code> <Str sr="arg0" ve="3">%APPRUNCODE</Str> <Str sr="arg1" ve="3">1</Str> <Int sr="arg2" val="0"/> <Int sr="arg3" val="0"/> </Action> <Action sr="act9" ve="7"> <code>548</code> <Str sr="arg0" ve="3">%APPTOCHECK running in foreground APPRUNCODE is now 1</Str> <Int sr="arg1" val="1"/> <ConditionList sr="if"> <Condition sr="c0" ve="3"> <lhs>%FLASHING</lhs> <op>2</op> <rhs>1</rhs> </Condition> </ConditionList> </Action> </Task> </TaskerData>
Ein weiterer Task muss erstellt werden, der obigen (zuerst als Progcheck_variables.tsk.xml importieren) aufruft:
A1: Perform Task "Progcheck_variables"
mit par1: com.android.xyz oder wie auch immer die App heisst
par2: 1 (damit wird per flash gesagt, was passiert, nach Lernphase auf 0 setzen)
und in %APPRUNCODE steht dann eine Zahl, die den Status der App enthält
 

Ähnliche Themen

M
Antworten
23
Aufrufe
1.031
senior-ipaq
S
H
Antworten
15
Aufrufe
497
MeinNickname
MeinNickname
U
Antworten
5
Aufrufe
153
semko
S
Zurück
Oben Unten