Witam,
Jakiś czas temu zainteresowałem się Taskerem, wiec siłą rzeczy musiałem trafić na to forum. Jako że przy zgłębianiu tajników tego programu posiłkuję się wiedzą zdobytą także tu, chciałbym podzielić się owocami tego zgłębiania 🙂
Jedną z rzeczy od początku najbardziej dającą mi się we znaki było to że dla Taskera jako aktywne widoczne są tylko aplikacje na pierwszym planie. To bardzo mocno ogranicza jego funkcjonalność. Mimo usilnych poszukiwań w necie nigdzie nie znalazłem w pełni satysfakcjonującego rozwiązania tego problemu, tak więc podzielę się swoim.
Opiera się ono na taskerowym Run Shell i Unixowej komendzie top, zastosowanych w tasku wyjściowym Application. No i na znajomości uruchomionych przez aplikację procesów. Nie jest to sposób idealny i dotyczy tylko części aplikacji, które zachowują się zgodnie z jednym dwóch scenariuszy. I takich które naprawdę pracują w tle, a nie tylko czekają na coś.
top -n 1 | grep -w com.rmf | grep -c fg
Zmienna zwracająca wartość z tasku Run Shell w tym przypadku zwróci nam wartość 0 jeśli aplikacja RMFon.pl jest wyłączona, a wartość 1 jeżeli pracuje w tle.
Przykładem aplikacji którą należy sprawdzić inaczej jest Yanosik.
Jeśli jest uruchomiona na pierwszym planie w poleceniu top występuje z flagą fg, jeśli w tle z flagą bg, natomiast jeśli nie jest uruchomiona nie występuje wcale, dlatego też poprzednie sprawdzenie wyników polecenia top się nie sprawdzi. Musimy zmienić fg na bg, lub też po prostu użyć takiej komendy:
top -n 1 | grep –cw pl.neptis.yanosik.mobi.android
To czy aplikacja która nas interesuje zachowuje się zgodnie z którymś z podanych scenariuszy musimy sprawdzić sami.
Niestety jest wiele aplikacji które zachowują się jeszcze inaczej i taki sposób się nie sprawdzi, no ale lepszy rydz niż nic 🙂
To jeśli chodzi o sprawdzanie pojedynczej aplikacji.
Jeżeli w profilu Application chcielibyśmy użyć więcej niż jedną aplikację takie sprawdzanie byłoby bardzo niewygodne, dlatego też można sobie sprawę zautomatyzować używając dla polecenia top pliku wyjściowego, a grep plików wejściowych z listami aplikacji do sprawdzenia.
Poniżej przykładowy task wyjściowy dla Application oraz przykładowe pliki z listami procesów aplikacji.
Task
AppActive (91)
A1: Run Shell [ Command:top -n 1 > /mnt/sdcard/Tasker/tmpAPP.txt Timeout (Seconds):0 Use Root:Off Store Output In:%tmp Store Errors In: Store Result In: Continue Task After Error:On ]
A2: Run Shell [ Command:grep -wf /mnt/sdcard/Tasker/listaAPPfg.txt /mnt/sdcard/Tasker/tmpAPP.txt | grep -c fg Timeout (Seconds):0 Use Root:Off Store Output In:%tmp Store Errors In: Store Result In: Continue Task After Error:On ]
A3: Run Shell [ Command:grep -cwf /mnt/sdcard/Tasker/listaAPPbg.txt /mnt/sdcard/Tasker/tmpAPP.txt Timeout (Seconds):0 Use Root:Off Store Output In:%tmp Store Errors In: Store Result In: Continue Task After Error:On ] If [ %tmp = 0 ]
A4: Variable Set [ Name:%AppActive To:0 Do Maths:Off Append:Off ] If [ %tmp = 0 ]
listaAPPfg.txt
com.rmf
com.google.android.maps.mytracks
listaAPPbg.txt
pl.neptis.yanosik.mobi.android
Dokładnie taki sposób jaki przedstawiłem sprawdzi się na telefonach z root i BusyBox.
Na telefonach bez roota z tego co wiem to zadziała w Run Shell tylko polecenie top i przekierowanie do pliku, więc to co w moim rozwiązaniu robi grep trzeba zapewne zrealizować poprzez analizę pliku za pomocą Read Line.