13 października 2014

Tasker - aktualizacja do wersji 4.5u1

Przedwczoraj pojawiła się nowa wersja Taskera 4.5u1. Jest to aktualizacja poprawiająca błędy w wersji 4.5. Zachęcam do aktualizacji.

Lista zmian

  • change: listMarginWidthPercent is written to prefs file so user doesn't need to create new entry
  • change: app creation: Debug Version option no longer causes debuggable to be set in the manifest (prevented Play Store publication)
  • bugfix: Text element in scene: links were causing crash
  • bugfix: BT Near: bugged in some earlier Android versions
  • bugfix: scene destruction: wasn't tidying up event handlers correctly which was producing warnings
  • bugfix: scene element TextEdit: crash due to cursor movement in some circumstance
  • bugfix: catch exception selecting sub-activities for some apps
  • bugfix: catch exception when state plugin result comes in for profile that doesn't exist anymore
  • bugfix: better handle exceptions that can occur loading bad config data

Pobieranie

Google Play
Strona Taskera

7 października 2014

Tasker - aktualizacja do wersji 4.5

Właśnie pojawiła się nowa wersja Taskera 4.5. Zachęcam do aktualizacji.

Lista zmian

  • switched to Google Maps API v2
  • app creation: users of maps in scenes will need to get a Google Maps API v2 key
  • removed: element Add Geomarker: parameters Label, Label Colour (not supported by new Maps API v2)
  • added: location edit: optionally long-click and drag on current location marker to move it
  • added: map element: toggle parameter for roads
  • added: action Element Map Control: Hide/Show Roads, Enable/Disable Compass/Tilt/Rotation/Zoom Gestures, Hide Zoom Controls modes
  • added: location edit: show lat/lng at top, editable
  • added: %WIFII: channel number when wifi is connected (Android L+)
  • added: actions Timer Widget Control and Timer Widget Set
  • added: action Variable Subtract: Wrap Around parameter
  • added: builtin local array variable %caller (caller trace for current task) (see Variables section of Userguide)
  • added: location Edit: menu option to enter text address
  • added: plugins: action/event/state edit screens: show relevant variables from plugins
  • added: action Element Image: usable for Button and Slider elements
  • added: test Scene: width and height
  • bugfix: patch for Android PRNG bug (may improve random number generation on some devices)
  • bugfix: Set Widget Icon/Label: spurious error message when an anonymous widget was present on home screen
  • bugfix: Search: bad bottom button alignment in some languages
  • bugfix: main screen, variables tab: show max 500 characters of a variable contents (longer vars can lock up UI)
  • bugfix: monitor was hanging under high system load sometimes, improved broadcast handling efficiency
  • bugfix: task select list: was generating spurious warning on all Tasker UI themes except Light
  • bugfix: another attempted fix for ANRs during plugin response processing
  • bugfix: BT Near: workaround for Android bug reporting device type as unknown from an LE scan
  • bugfix: event Received Text: MMS wasn't working on 4.1 and earlier devices
  • bugfix: %WIFII: was not converting many frequencies to the correct channel
  • bugfix: action Test Tasker: action/event/state selection had bad title
  • bugfix: TextEdit element: cursor was not being moved to end when text was set
  • bugfix: action Popup: several local variables weren't being set on timeout with a default item selected (e.g. %tap_label)
  • bugfix: app creation: JavaScriptlet references to showScene and performTask: include relevant task/scene in kid
  • bugfix: scene element text: Vertical Fit Mode: Reduce Text Size: improved fitting algorithm
  • bugfix: app creation: slider element icons were not being exported or applied correctly
  • bugfix: profile list on/off buttons could have labels in incorrect language
  • bugfix: failure to import old data due to over-enthusiastic data verification checks
  • bugfix: app creation: JS func getLocation: include coarse and fine location permissions, relevant features
  • bugfix: action Element Value: wasn't setting initial value of spinner that had never been displayed when filled from variable
  • bugfix: %PRESSURE: wasn't being populated if not pressure state defined
  • bugfix: app creation: images in scene element Layout parameters weren't being packaged in kid apk
  • bugfix: problem with monitor being killed when UI exited on LG G2 / 4.4.2, possibly other devices
  • bugfix: scene Text elements with Scrolling enabled were blocking input to underlying elements even when hidden
  • bugfix: action Scan Card wasn't handling absolute paths
  • change: use holo dark for default theme on L devices until a final L ROM is available
  • change: Tasker no longer requires Google Maps (or Play Services) to be installed (but map-based functionality will not be accessible if they are missing)
  • change: multiple map elements are possible in a scene
  • change: state Wifi Near: channel max upped to 196
  • change: profile list on/off in German = Ein/Aus
  • change: read list drag margin width percent from sharedprefs if present, so customizable for root users (integer key listMarginWidthPercent)

Pobieranie

Google Play
Strona Taskera

4 października 2014

Profil: Głosowe wybieranie numerów

Dziś mniej teorii, a więcej praktyki. Zajmiemy się profilem, który umożliwi głosowe wybieranie numerów kontaktów i inicjowanie połączenia głosowego. Niestety sam Tasker nie pozwoli zrealizować takiego profilu. Pomocne będą wtyczki AutoContacts i AutoVoice.
Profil ma za zadanie odnaleźć dany kontakt w książce adresowej, odczytać jego numery telefonów, zapytać użytkownika, na który numer chce zadzwonić i wywołać połączenie.

Wymagania

  • wtyczka AutoVoice w wersji płatnej
  • wtyczka AutoContacts w wersji płatnej
  • generator głosu Text-To-Speech, przykładowo IVONA lub Google TTS
  • do poprawnego działania profilu niezbędny jest porządek w książce adresowej tzn. numery telefonów muszą być opisane jako komórka, domowy lub służbowy

Wtyczka AutoVoice

Wtyczka AutoVoice, w wielkim skrócie, pozwala na uruchamianie tasków Taskera za pomocą komend głosowych. Dzięki niej możemy oprogramować głosowo praktycznie wszystkie funkcje telefonu lub tabletu. Do prawidłowego działania wtyczka wymaga połączenia z internetem.

Instalacja i konfiguracja

Wtyczkę AutoVoice można pobrać ze sklepu Google Play. Po instalacji i wykupienia wersji Pro pozostaje wybór sposobu uruchamiania komend głosowych. Najprostszym rozwiązaniem jest dodanie na pulpit skrótu Recognize.

Trochę wygodniejszym rozwiązaniem jest uruchamianie tego skrótu gestem co można osiągnąć stosując alternatywne launchery np. Nova Launcher

Wtyczka AutoContacts

Wtyczka AutoContacts daje dostęp Taskerowi do kontaktów z książki adresowej. Dzięki niej możemy dotrzeć do numerów telefonów kontaktu, do którego chcemy zadzwonić.

Instalacja i konfiguracja

Wtyczkę AutoContacts można pobrać ze sklepu Google Play. Po instalacji i wykupienia wersji Pro należy w konfiguracji wtyczki uruchomić opcję Force Refresh Contacts co pozwoli odczytać z książki adresowej dane wszystkich kontaktów.
Aby łatwiej wybierać głosowo kontakty dobrze jest najczęściej używanym nadać ksywki. Po naciśnięcie opcji Manage Contacts w konfiguracji wtyczki i przytrzymaniu dłużej wybranego kontaktu możemy nadać mu ksywkę (opcja Set Nickname). Przykładowo kontaktowi Jan Kowalski nadanie ksywki Janka pozwoli na wykonanie połączenia telefonicznego do tego kontaktu poprzez wypowiedzenie komendy zadzwoń do Janka zamiast zadzwoń do Jan Kowalski.

Opis wykonania

Kontekstem uruchamiającym profil jest State / Plugin / AutoVoice Recognized. W konfiguracji kontekstu należy zaznaczyć opcję Event Behavior oraz Use Regex natomiast w polu Command Filter wpisać zadzwoń do (?<contact>.+). Taki zapis oznacza, że wszystko co zostanie wypowiedziane po zadzwoń do zostanie przekazane do tasku profila w postacie zmiennej %contact.

W edycji tasku zaczynamy od akcji Plugin / AutoContacts. W konfiguracji akcji w polu Contact Name or Nickname wpisujemy %contact czyli każemy wtyczce wyszukać dane kontaktu, którego nazwę/ksywkę dostarczymy w komendzie głosowej.
Następnie sprawdzamy za pomocą akcji If czy zmienna %acnunmber (czyli przechowująca numer telefonu odnalezionego kontaktu) ma wartość. Jeśli nie za pomocą akcji Say informujemy użytkownika o błędzie. Akcja Say używa generatora głosu Text-To-Speech by tekst zamienić na mowę.

Następnie musimy użyć akcji Variable Split, które dzielą ciągi tekstowe na części tworząc zmienną typu macierz. Jako, że AutoContacts poszczególne wartości oddziela przecinkami to w akcji Variable Split jako separatora użyjemy właśnie przecinka.
Zmienne %acallnumbers (wszystkie numery telefonów danego kontaktu) i %acallnumbertypes (typy numerów telefonów) są zmiennymi macierzowymi i mogą zawierać wyniki pochodzące od więcej niż jednego kontaktu. Dlatego odczytujemy tylko pierwsze rekordy podając parametr 1 lub (1).

Kolejnym krokiem jest przekazanie do zmiennej %index pozycji, na której znajdują się poszczególne typy numerów telefonów. W przypadku telefonu komórkowego będzie to %acallnumbertypes1(#?Komórka). Dalej za pomocą wyznaczonej wartości przekazujemy do zmiennej %komórka numer telefonu komórkowego za pomocą składni %acallnumbers1(%index1). Następnie powtarzamy te operacje dla telefonu domowego oraz służbowego.
Należy pamiętać, że w różnych wersjach producenckich systemu Android inaczej mogą być oznaczane typy numerów telefonów. W przypadku "czystego" Androida oraz wszelkich wersji bazujących na AOSP/CM będzie to odpowiednio: Komórka, Służbowy, Domowy. Jeśli w danym systemie oznaczenie te są inne (przykładowo w telefonach Samsunga numer telefonu komórkowego opisywany jest jako Komórkowy) należy zmienić je w akcjach numer 8, 11 i 14.
Kolejnym krokiem jest połączenie numerów telefonów ze zmiennych %komórka, %dom, %praca (pod warunkiem, że mają wartości) oddzielonych przecinkami do zmiennej %telefony za pomocą akcji Variable Set z zaznaczoną opcją Append. Teraz możemy zamienić tą zmienną w macierz i ilość jej elementów przekazać do zmiennej %index.

Jeśli wartość %index ma wartość 1 czyli kontakt ma tylko jeden numer telefonu za pomocą akcji Call wywołujemy połączenie głosowe pod dany numer.
Jeśli zmienna %index ma wartość większą od 1 za pomocą akcji Say pytamy użytkownika, na który numer ma być wykonane połączenie. Odpowiedź głosową rejestrujemy akcją AutoVoice Recognize, która trafia do zmiennej %avcomm. Następnie wywołujemy akcję Call pod wybrany numer w zależności od zawartości tej zmiennej.

I to już koniec. Profil gotowy. Na zrzutach ekranu powinien on wyglądać następująco:

Aby w przyszłości AutoContacts miał dostęp do dodanych i zmienionych kontaktów należy stworzyć profil, który będzie odświeżał dane wtyczki. U mnie taki profil uruchamia się codziennie o drugiej godzinie w nocy pod warunkiem podłączneia telefonu do ładowarki. W tasku tego profilu należy dodać akcję AutoContacts z zaznaczoną opcją Refresh.

Rozpisany profil

Profile: Zadzwoń do (195)
State: AutoVoice Recognized [ Configuration:Event Behaviour: true Command: "zadzwoń do (?<contact>.+) (regex)" ]
Enter: Anon (196)
A1: AutoContacts [ Configuration:Contact Name or Nickname: %contact Package:com.joaomgcd.autocontacts Name:AutoContacts Timeout (Seconds):1000 Continue Task After Error:On ]
A2: If [ %acnumber !Set ]
A3: Say [ Text:Nie znaleziono kontaktu %contact Engine:Voice:default:default Stream:5 Pitch:5 Speed:5 Respect Audio Focus:On Network:Off Continue Task Immediately:Off ]
A4: Stop [ With Error:Off Task: ]
A5: End If
A6: Variable Split [ Name:%acallnumbers1 Splitter:, Delete Base:Off ]
A7: Variable Split [ Name:%acallnumbertypes1 Splitter:, Delete Base:Off ] <komórka>
A8: Variable Set [ Name:%index To:%acallnumbertypes1(#?Komórka) Do Maths:Off Append:Off ]
A9: Variable Split [ Name:%index Splitter:, Delete Base:Off ] If [ %index !~ 0 ]
A10: Variable Set [ Name:%komórka To:%acallnumbers1(%index1) Do Maths:Off Append:Off ] If [ %index !~ 0 ] <praca>
A11: Variable Set [ Name:%index To:%acallnumbertypes1(#?Służbowy) Do Maths:Off Append:Off ]
A12: Variable Split [ Name:%index Splitter:, Delete Base:Off ] If [ %index !~ 0 ]
A13: Variable Set [ Name:%praca To:%acallnumbers1(%index1) Do Maths:Off Append:Off ] If [ %index !~ 0 ] <dom>
A14: Variable Set [ Name:%index To:%acallnumbertypes1(#?Domowy) Do Maths:Off Append:Off ]
A15: Variable Split [ Name:%index Splitter:, Delete Base:Off ] If [ %index !~ 0 ]
A16: Variable Set [ Name:%dom To:%acallnumbers1(%index1) Do Maths:Off Append:Off ] If [ %index !~ 0 ]
A17: Variable Set [ Name:%telefony To:komórka, Do Maths:Off Append:Off ] If [ %komórka Set ]
A18: Variable Set [ Name:%telefony To:dom, Do Maths:Off Append:On ] If [ %dom Set ]
A19: Variable Set [ Name:%telefony To:praca, Do Maths:Off Append:On ] If [ %praca Set ]
A20: Variable Split [ Name:%telefony Splitter:, Delete Base:Off ]
A21: Variable Set [ Name:%index To:%telefony(#) Do Maths:Off Append:Off ]
A22: If [ %index = 1 ]
A23: Call [ Number:%komórka Auto Dial:On ] If [ %komórka Set ]
A24: Call [ Number:%dom Auto Dial:On ] If [ %dom Set ]
A25: Call [ Number:%praca Auto Dial:On ] If [ %praca Set ]
A26: Else
A27: Say [ Text:Na który numer %acname chcesz zadzwonić: %telefony Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:On Network:Off Continue Task Immediately:Off ]
A28: AutoVoice Recognize [ Configuration: Voice command without headset Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A29: Call [ Number:%komórka Auto Dial:On ] If [ %avcomm ~ *komórka* ]
A30: Call [ Number:%dom Auto Dial:On ] If [ %avcomm ~ *dom* ]
A31: Call [ Number:%praca Auto Dial:On ] If [ %avcomm ~ *praca* ]
A32: End If

Profile: Odświeżanie kontaktów (197)
Time: 02:00
State: Power [ Source:AC ]
Enter: Anon (198)
A1: AutoContacts [ Configuration:Refresh: true Package:com.joaomgcd.autocontacts Name:AutoContacts Timeout (Seconds):1000 ]

Pobieranie profilu

Profil Głosowe wybieranie połączenia telefonicznego [Tasker 4.5u1]

30 sierpnia 2014

Zapętlony Tasker

Prędzej czy później (raczej prędzej) tworząc profile w Taskerze potrzebne nam będzie skorzystanie z instrukcji warunkowych i pętli. Dla niewtajemniczonych pewnie brzmi to dość strasznie ale postaram się wszystko łopatologicznie wytłumaczyć. Przed pętlami omówię akcje Goto, Stop oraz etykiety akcji, które będą nam za chwilę potrzebne.
Oczywiście zachęcam do komentowania i zadawania pytań jeśli coś będzie niejasne.

Akcje Goto, Stop oraz etykiety

Zazwyczaj akcje tasku wykonywane są kolejno jeden po drugim. Dzięki akcji Goto możemy wykonać skok do innych części tasku. Skok taki można wykonać do:

  • akcji o wybranym numerze
  • akcji o wprowadzonej etykiecie (label)
  • początku pętli
  • końca pętli
  • końca instrukcji warunkowej If
Etykieta akcji to nazwa nadana przez użytkownika. Tworzy się ją w konfiguracji danej akcji zaznaczając checkbox Label i wpisując nazwę etykiety.
Akcja Stop powoduje natychmiastowe zakończenie przetwarzania tasku.

Instrukcja warunkowa If...Else...End If

Instrukcja warunkowa If jest elementem, który pozwala wykonać pewne akcje w zależności od tego czy zdefiniowane wyrażenie logiczne jest spełnione lub nie.
Instrukcję tą tworzymy za pomocą akcji If, Else oraz End If. W konfiguracji akcji If dokonujemy porównania wartości. Jeśli jest ono spełnione wykonują się akcje po akcji If, jeśli nie, wykonują się akcje po akcji Else (jeśli takowa jest dodana). Jeżeli po instrukcji warunkowej mają być umieszczone inne akcje, nie związane z instrukcją warunkową, trzeba zakończyć ją akcją End If.

Warunek If można też stosować w konfiguracji każdej akcji. Pozwala to uprościć warunki. W powyższym przykładzie warunek If dodany jest w konfiguracji akcji Else dzięki czemu otrzymujemy podwójną instrukcję warunkową. Dla zmiennej %BATT (globalna zmienna Taskera przechowująca poziom naładowania baterii) większej od 90 zostanie wyświetlony tost z tekstem Bateria naładowana. Jeśli wartość zmiennej %BATT będzie mniejsza niż 90 ale większa niż 20 (dodatkowy warunek If w konfiguracji akcji Else) wyświetlony zostanie tost Bateria: powyżej 20%. Jeśli żaden z powyższych warunków nie będzie spełniony zostanie wyświetlony tost Bateria bliska rozładowaniu.

Pętla warunkowa For each...Loop

Pętla warunkowa For each umożliwia wykonanie zestawu akcji dla wybranych wartości nadawanych zmiennej. Akcja For each może przyjmować następujące zestawy wartości:

  • wartości tekstowe oddzielone przecinkami np. dom,drzewo,koń,samochód
  • wartości liczbowe oddzielone przecinkami np. 3,5,8,9
  • zakres wartości liczbowych np. 2:8 co jest równoznaczne z 2,3,4,5,6,7,8
  • zakres wartości liczbowych ze zdefiniowanym skokiem np. 0:10:2 co jest równoznaczne z 0,2,4,6,8,10
  • część zmiennej typu macierz np. %macierz(1:2) co jest równoznaczne z %macierz1,%macierz2
Jeśli jako zestaw wydajności podana zostanie zmienna typu macierz w takim zapisie %macierz() to pętla zostanie wykonana dla jej wszystkich elementów.
Na powyższym przykładzie zdefiniowano zakres wartości od 0 do 8 ze skokiem 2. Pierwsza akcja Goto powoduje przeskok do następnego elementu serii bez wykonania pozostałych akcji pętli jeśli zmienna %licznik ma wartość 4. Druga akcja Goto spowoduje przeskok do końca pętli jeśli zmienna %licznik ma wartość większą od 6. Jako wynik tego tasku otrzymamy tosty z wartościami kolejno 0, 2, 6, 8.

Pętla warunkowa Until...Loop

Pętla warunkowa Until pozwala na wykonanie pewnych akcji dopóki dana zmienna nie spełni założonego warunku. Tasker nie ma specjalnej akcji Until ale można ją zrealizować poprzez akcję Goto.

Dopóki zmienna %licznik będzie mniejsza od 12 akcja Goto będzie wykonywała przeskoki do akcji numer 2 czyli akcje pętli warunkowej będą powtarzane. Akcja Variable Add za każdym razem zwiększa zmienną %licznik o 3 (możliwe jest zdefiniowanie innej wartości w konfiguracji akcji). Gdy po czterech powtórzeniach pętli wartość zmiennej %licznik będzie wynosił 12, pętla zostanie zakończona.

Pętla warunkowa While...Loop

Pętla warunkowa While pozwala na wykonanie pewnych akcji w czasie gdy dana zmienna spełnia założony warunek. Tasker nie ma specjalnej akcji While ale można ją zrealizować poprzez akcje Goto i Stop.

W czasie gdy zmienna %licznik nie będzie równa 12 akcja Goto będzie dokonywała skoków do akcji Stop z etykietą pętla, która sprawdza warunek co spowoduje powtarzanie akcji pętli (Flash oraz Variable Add zwiększające wartość zmiennej o 3). Gdy zmienna %licznik osiągnie wartość 12, warunek zostanie spełniony i akcja Stop zatrzyma pętle warunkową oraz cały task.

24 sierpnia 2014

Operatory logiczne, znaki specjalne i porównywanie wartości

Dziś czeka Cię czytelniku trochę teorii. Niestety jest ona niezbędna by sprawnie posługiwać się zmiennymi, instrukcjami warunkowymi i pętlami. Postaram się przedstawić ją w taki sposób byśmy przeszli przez nią bezboleśnie nie przysypiając przed monitorem, a w kolejnym wpisie spróbujemy wykorzystać nowo nabytą wiedzę w praktyce.

Operatory logiczne

Aby bezproblemowo posługiwać się instrukcjami warunkowymi i pętlami niezbędne jest porównywanie wartości zmiennych. W Taskerze można tego dokonać na dwa sposoby. Pierwszy sposób to tzw. uproszczony, drugi to wyrażenia regularne (RegEx), o którym napiszę przy innej okazji.
Dziś zajmiemy się sposobem uproszczonym realizowanym przez operatory logiczne oraz uniwersalne operatory Matches/Not Matches. Wykorzystując je porównujemy prawy parametr czyli wzór do wartości po lewej stronie.
Wzór (prawy parametr) możemy definiować wykorzystując znaki specjalne.

Znaki specjalne

  • / oznacza operator logiczny lub czyli wzór zielony/czerwony będzie pasował do wartości czerwony lub do wartości zielony
  • * oznacza dowolną ilość dowolnych znaków czyli wzór 123* będzie pasował do wartości 123 ale także do 123DOM
  • + oznacza jeden lub więcej dowolnych znaków czyli wzór 123+ nie będzie pasował do wartości 123, a będzie pasował do wartości 123D
  • ! oznacza negację czyli !*zielony*/*czerwony* będzie pasował do wszystkich wartości poza tymi zawierającymi zielony lub czerwony

Wielkość liter w porównaniach

Wielkość liter nie gra roli przy porównywaniu wartości chyba, że wzór (prawy parametr) ma w zapisie wielkie litery. Wtedy wielkość liter ma znaczenie.

Przykłady porównywania wartości

  • pomoc pasuje do pomoc ale nie do pomocny
  • pomoc* pasuje do pomoc i do pomocny
  • *nie* pasuje do każdego ciągu znaków zawierającego nie
  • 123+ pasuje do 123 i przynajmniej jednego znaku np. 1234
  • + pasuje do przynajmniej jednego znaku (niepusta wartość)
  • nie*domu pasuje do niedaleko domu i nie mam domu
  • Pomoc/*gratis pasuje do Pomoc lub każdego ciągu znaków kończącego się ciągiem gratis

Porównywanie numerów telefonów kontaktów

W Taskerze porównywanie numerów telefonów kontaktów dostało kilka dodatkowych tagów specjalnych by ułatwić nam nieco życie.

  • C:ANY pasuje do numeru telefonu jakiegokolwiek kontaktu
  • C:FAV pasuje do numeru telefonu jakiegokolwiek kontaktu należącego do ulubionych
  • CG:nazwa_grupy pasuje do numeru telefonu jakiegokolwiek kontaktu z grupy nazwa_grupy

Przykłady porównywania numerów telefonów

  • !C:ANY pasuje do każdego numeru telefonu nie zapisanego w kontaktach
  • 025*/Janek* pasuje do numeru telefonu zaczynającego się 025 lub do numeru telefonu kontaktu, którego początek to Janek
  • C:FAV/0123456789 pasuje do numeru telefonu jakiegokolwiek kontaktu należącego do ulubionych lub numeru 0123456789
  • CG:*Rodzina*/CG:Praca pasuje do numerów kontaktów z grupy, która ma w nazwie ciąg Rodzina lub do numerów kontaktów z grupy Praca

Matches (~)

Z operatorem Matches warunek będzie spełniony jeśli obie wartości będą do siebie pasowały np. moje profile ~ *profil*

Not Matches (!~)

Z operatorem Not Matches warunek będzie spełniony jeśli obie wartości nie będą do siebie pasowały np. moje profile !~ *profil

Maths: Less Than (<)

Oba porównywane parametry muszą być wartościami liczbowymi i pierwszy musi być mniejszy od drugiego np. 3 < 6 by warunek był spełniony.

Maths: Greater Than (>)

Oba porównywane parametry muszą być wartościami liczbowymi i pierwszy musi być większy od drugiego np. 9 > 6 by warunek był spełniony.

Maths: Equals (=)

Oba porównywane parametry muszą być wartościami liczbowymi i obie wartości muszą być sobie równe np. 3 = 3 by warunek był spełniony.

Maths: Not Equals (!=)

Oba porównywane parametry muszą być wartościami liczbowymi i muszą być od siebie różne np. 3 != 6 by warunek był spełniony.

Maths: Is Even

Parametr musi być wartością liczbową parzystą by warunek był spełniony.

Maths: Is Odd

Parametr musi być wartością liczbową nieparzystą by warunek był spełniony.

Is Set / Isn't Set

Warunek jest spełniony jeśli dana zmienna ma ustawioną wartość/nie ma ustawionej wartości.

W praktyce można stosować operatory Matches/Not Matches w przypadku wartości liczbowych. Trzeba jedynie pamiętać, że w takim przypadku Tasker nie porównuje wartości liczbowych jako takich ale znaki. Jeśli znaki pasują to warunek będzie spełniony.

Warunki wykonania akcji

W konfiguracji każdej prawie akcji możliwe jest dodanie warunków, niezbędnych do spełnienia by ta akcja została wykonana.

Pomiędzy poszczególnymi warunkami wykonania akcji (jeśli jest ich więcej niż jeden) mogą za chodzić zależności And (wszystkie warunki muszą być spełnione), Or (przynajmniej jeden warunek musi być spełniony oraz Xor (dokładnie jeden warunek musi być spełniony).
Poza tym są jeszcze do dyspozycji operatory And+, Or+ oraz Xor+ czyli operatory z większym pierwszeństwem. Ogólnie zasada jest taka, że im bardziej na prawo przesunięty klawisz operatora to ma on większe pierwszeństwo. Dodatek + do nazwy operatora zwiększa pierwszeństwo danego warunku.

19 sierpnia 2014

Tasker - aktualizacja do wersji 4.4u3

Wczoraj Tasker został zaktualizowany do wersji 4.4u3. W liście zmian głównie same poprawki.

Lista zmian

  • change: increased SD logfile size to 2MB
  • bugfix: catch OOM when scrolling app list
  • bugfix: 2 situations where exe service was occasionally hanging
  • bugfix: menu element: when too many elements to fit on screen, rearrange and delete wasn't possible
  • bugfix: state Calendar Entry: names with space were being mangled on exiting state edit
  • bugfix: menu element: select mode none: click highlight didn't match that used elsewhere
  • bugfix: menu element: select mode none: click highlight was sticking
  • bugfix: android L: was crashing on startup with Default theme selected
  • bugfix: UI lock: multi-selecting task/scenes, long-click projects wasn't requesting code
  • bugfix: UI lock: locked tasks/profiles/scenes could be dragged and thus e.g. deleted
  • bugfix: added help text for State / Display / Display State

Pobieranie

Google Play
Strona Taskera

16 sierpnia 2014

Profil: Tost z danymi sieci WiFi po połączeniu

Mimo, że nie przepadam za nakładką TouchWiz autorstwa Samsunga ma ona kilka ciekawych i przydatnych elementów. Jednym z nich jest tost wyświetlający dane sieci WiFi i szybkość połączenia zaraz po jego nawiązaniu. Dziś zademonstruję w jaki sposób uzyskać podobną funkcjonalność w Taskerze.

Opis wykonania

Na ekranie głównym Taskera, w zakładce Profile naciskamy klawisz +, z listy kontekstów wybieramy State / Net / WiFi Connected. Na ekranie edycji kontekstu nic nie zmieniamy bo chcemy by tost był wyświetlany przy połączeniu z każdą siecią. Jeśli wypełnimy na tym ekranie pola SSID, MAC lub IP to profil będzie uruchamiany tylko po połączeniu z siecią spełniającą wpisane warunki. Przykładowo podanie nazwy SSID sieci PRZYKLADOWE-WIFI spowoduje, że połączenie tylko z tą siecią uaktywni profil.
Wciskamy klawisz wstecz, następnie wybieramy New Task i przechodzimy do edycji tasku wejściowego profilu.
Wyświetlanie tostu ma sens tylko w przypadku gdy urządzenie ma włączony ekran. Dlatego zaczniemy task od sprawdzenia jego statusu. Tasker przechowuje dane na temat statusu ekranu w zmiennej %SCREEN. Może on przyjmować wartości on i off czy odpowiednio włączony i wyłączony.
Wybieramy klawisz +, kategorię Task i akcję If. W konfiguracji akcji w lewej części obszaru Condition wpisujemy %SCREEN, w prawej on, a jako operator wybieramy Matches. Czyli dalsze akcje zostaną wykonane jeśli zmienna %SCREEN będzie miała wartość on (ekran włączony).

Po powrocie do ekranu edycji tasku zajmiemy się przygotowaniem danych do naszego tostu. Dane te są przechowywane w zmiennej %WIFII. Można sprawdzić jakie dane są dostępne w zmiennej wybierając klawisz menu / More / Run An Action / Alert / Flash i w polu text wpisać %WIFII. Po dotknięciu klawisza wstecz wyświetli się tost z zawartością zmiennej %WIFII. Nam zależy na nazwie SSID sieci, przyznanym urządzeniu adresie IP oraz prędkości połączenia. Aby wyciągnąć potrzebne nam dane skorzystamy z akcji Variable Split jednak najpierw wartość zmiennej %WIFII musimy przekazać do innej tymczasowej zmiennej %wifiinfo, którą będziemy mogli edytować. Wybieramy klawisz + następnie Variables / Variable Set i w konfiguracji akcji w pole Name wpisujemy %wifiinfo, a do pola To %WIFII. Następnie naciskamy klawisz wstecz, klawisz + i wybieramy Variables / Variable Split. W konfiguracji akcji w pole Name wpisujemy %wifiinfo oraz zaznaczamy opcję Delete Base (czyli usuwamy zmienną %wifiinfo po jej podziale). Akcja Variable Split dzieli ciąg znaków na części oddzielone wybranym znakiem (Splitter). W naszym przypadku nie wybraliśmy splittera więc Tasker przyjmie spację jako znak podziału. Każde słowo z oryginalnego tekstu jest teraz dostępne w zmiennej %wifiinfoX gdzie X to numer słowa w tekście.
Wybieramy klawisz wstecz, następnie + i dodajemy akcję Alert / Flash. W konfiguracji tej akcji w polu Text wpisujemy następujący tekst:

Połączono z siecią: %wifiinfo4
Adres IP: %wifiinfo9
Prędkość: %wifiinfo13
oraz zaznaczamy opcję Long (by tost wyświetlał się dłużej).
Naciskamy teraz dwukrotnie wstecz i mamy gotowy profil. Powinien on wyglądać następująco:

Rozpisany profil

Profile: Połączone WiFi (91)
State: Wifi Connected [ SSID:* MAC:* IP:* ]
Enter: Anon (152)
A1: If [ %SCREEN ~ on ]
A2: Variable Set [ Name:%wifiinfo To:%WIFII Do Maths:Off Append:Off ]
A3: Variable Split [ Name:%wifiinfo Splitter: Delete Base:On ]
A4: Flash [ Text:Połączono z siecią %wifiinfo4
Adres IP: %wifiinfo9
Prędkość: %wifiinfo13 Long:On ]

Wideo

Pobieranie profilu

Profil Tost z danymi sieci WiFi po połączeniu [Tasker 4.4u2]

Aktualizacja

Jak kolega mrtur zauważył w komentarzach w przypadku gdy nazwa sieci będzie zawierała spację profil wyświetli niepoprawne dane. Dlatego poniżej przedstawiam poprawioną wersję.
Tym razem posłużyłem się akcją Variable Search Replace z wyszukiwaniem ciągu (?<=(\n)).*, który podzieli tekst na poszczególne linie, które trzeba poprzycinać do odpowiednich długości za pomocą kolejnych akcji Variable Search Replace z odpowiednimi wartościami pola Search.

6 sierpnia 2014

Tworzymy pierwszy profil

Przyszedł w końcu czas na własnoręczne stworzenie pierwszego profilu. Przedstawię krok po kroku jak stworzyć bardzo prosty profil wyświetlający tzw. tost "Witaj" po odblokowaniu ekranu. Do opisu załączę wyeksportowany plik xml do pobrania, opis wszystkich akcji i kontekstów oraz klip wideo, na którym pokażę, co i jak trzeba po kolei wykonać.

Ekran edycji tasku

Zaczniemy jednak od omówienia ekranu edycji tasku. Standardowo na dole mamy klawisz +, który umożliwia dodanie nowej akcji, w dolnym pasku jest jeszcze klawisz ze znakiem Play umożliwiający uruchomienie tasku. Dłuższe przytrzymanie palca na którejś z dodanych już akcji wyświetla na górze ekranu pasek umożliwiający kopiowanie, wklejanie i wyłączanie tej akcji. Wyłączona akcja oznaczona będzie fioletowym paskiem i nie będzie uruchamiana.

Profil "Witaj"

Zaczynamy tworzyć profil. Na zakładce profile Taskera naciskamy klawisz +. Pojawi się lista rodzajów kontekstów. Chcemy by nasz profil uaktywniał się przy odblokowaniu ekranu z listy wybieramy Event, a następnie z listy Display / Display Unlocked. W tym momencie Tasker wyświetli ekran konfiguracji tego kontekstu gdzie można wybrać priorytet kontekstu. Od priorytetu zależy pozycja tasku wejściowego profilu na liście oczekiwania (jeśli akurat wykonują się inne taski). W tym przypadku nie zależy nam na wysokim priorytecie więc pozostawiamy standardowy Normal.
Naciskamy klawisz Back i z listy, która się pokaże wybieramy New Task. W tym momencie Tasker zapyta o nazwę tasku. Nie ma konieczności podawania nazwy tasku ale na dłuższą metę dzięki nazwom tasków łatwiej się zorientować co i kiedy się uruchamia. W naszym przypadku nie wpisujemy nazwy zadania. Tasker przenosi nas do ekranu edycji tasku wejściowego.
Przy okazji tworzenia tego tasku użyjemy po raz pierwszy zmiennych. Nie są one w tym przypadku konieczne ale im szybciej zaczniesz ich używać tym szybciej je opanujesz. Naciskamy więc klawisz plus, z listy akcji wybieramy Variables / Variable Set. Na ekranie edycji tej akcji w polu Name wpisujemy %tekst (czyli tworzymy zmienną lokalną o nazwie %tekst), a w polu To wpisujemy Witaj (czyli nadajemy zmiennej wartość). Naciskamy klawisz wstecz i wracamy do ekranu edycji tasku. Znów naciskamy klawisz plus i wybieramy Alert / Flash. Na ekranie edycji tej akcji w polu Text wpisujemy %tekst oraz zaznaczamy opcję Long (by nasz tost dłużej trwał). Zadaniem akcji Flash będzie wyświetlenie na ekranie tekstu znajdującego się w zmiennej %tekst czyli słowa Witaj. Naciskamy klawisz wstecz i mamy przed sobą cały task tworzonego profilu. Po ponownym naciśnięciu klawisza wstecz widzimy gotowy profil. Ekrany te powinny wyglądać jak na poniższych zrzutach ekranu.

Jeśli wszystko wygląda prawidłowo możemy wyjść z Taskera, wyłączyć i włączyć ekran urządzenia i po odblokowaniu powinien pojawić się tost o treści "Witaj".

Rozpisany profil

Profile: Powitanie po odblokowaniu (152)
Event: Display Unlocked
Enter: Anon (160)
A1: Variable Set [ Name:%tekst To:Witaj Do Maths:Off Append:Off ]
A2: Flash [ Text:%tekst Long:On ]

Wideo

Pobieranie profilu

Profil Witaj [Tasker 4.4u2]

29 lipca 2014

Podstawowe pojęcia i omówienie interfejsu Taskera

Przy pierwszym uruchomieniu Taskera większość użytkowników nie wie jak zacząć na nim pracować. Wbrew temu co mogłoby się wydawać aplikacja ma bardzo przemyślany i logicznie zaprojektowany interfejs. Trzeba go jedynie poznać i się do niego przyzwyczaić. Jeśli ktoś ma ambicję by poznać Taskera to od razu proponuję wyłączyć Beginner Mode. Bez tego część możliwości aplikacji jest niewidoczna. Opcję tą wyłącza się w ustawieniach Preferences / UI.

Podstawowe pojęcia

Zanim zaczniemy omawiać wygląd okna i stawiać pierwsze kroki w automatyzacji naszego urządzenia należy zapoznać się z nazewnictwem poszczególnych elementów aplikacji by później łatwiej poruszać się w opisach możliwości Taskera.

Profil

Profilem nazywa się powiązanie kontekstu (warunków uruchomienia) z taskiem (zadaniem) do wykonania. Profil może mieć kilka kontekstów, pomiędzy którymi występuje operator logiczny ORAZ czyli muszą być wszystkie spełnione by profil stał się aktywny. Profil może mieć status włączony lub wyłączony. Jeśli jest wyłączony to pomimo spełnienia warunków jego kontekstów nie uaktywni się. Należy pamiętać, że wyłączenie profilu w trakcie jego aktywności spowoduje wykonanie tasku wyjściowego.

Task

Task (zadanie) jest zbiorem akcji do wykonania. W przypadku tasków powiązanych z profilem rozróżnia się task wejściowy (uruchamiany gdy profil staje się aktywny) i task wyjściowy (uruchamiany gdy profil przestaje być aktywny). Wyjątkiem od tego są profile uruchamiane kontekstem typu event (zdarzenie), które nie trwają w czasie (po prostu wykonywany jest task wejściowy i nie ma tasku wyjściowego). Przykładem kontekstu typu event jest włączenie ekranu. Jest to tylko zdarzenie i nie trwa ileś czasu. Task nie musi być powiązany z profilem. W takim wypadku, odnosząc się do języków programowania, pełni rolę procedury lub funkcji.

Scena

Scena jest zbudowanym przez użytkownika ekranem umożliwiającym wyświetlanie lub pobieranie danych.

Zmienna

Zmienna jest to konstrukcja programistyczna charakteryzująca się nazwą, typem oraz wartością, umożliwiająca odwoływanie się do jej wartości za pomocą jej nazwy. Ktoś zrozumiał? Upraszczając mamy sobie zmienna %TIME (nazwy zmiennych w Taskerze zawsze poprzedzane są znakiem % i muszą mieć długość minimum 3 znaków). Jest to zmienna na stałe wbudowana w Taskera i przez niego aktualizowana na bieżąco, a zawiera aktualny czas. Czyli jeśli projektując task potrzebujemy użyć aktualnej godziny to wystarczy, że odczytamy wartość ze zmiennej %TIME. Zmienne możemy tworzyć samemu i przechowywać w nich dane. Są to zmienne użytkownika. W Taskerze występują dwa rodzaje zmiennych użytkownika: lokalne i globalne. Zmienne globalne (ich nazwy muszą zawierać przynajmniej jedną wielką literę np. %Dom lub %doM) to takie, do których mamy dostęp we wszystkich taskach. We wcześniejszych wersjach Taskera zmienne globalne musiały mieć całe nazwy pisane wielkimi literami i ja z przyzwyczajenia stosuję tą zasadę. Zmienne lokalne (z nazwami pisanymi małymi literami np. %liczba) dostępne są tylko w obrębie jednego tasku. Jeśli nie ma potrzeby by wartość ze zmiennej była dostępna w innych taskach zaleca się stosować zmienne lokalne. W Taskerze nie ma podziału zmiennych w zależności od typów danych jak w wielu językach programowania. Należy pamiętać, że zmienne %Dom i %doM to całkowicie różne zmienne.

Kontekst

Kontekst to inaczej warunek aktywacji profilu. Warunkiem tym mogą być bardzo różne zdarzenia, przykładowo: data, czas, połączenie z siecią WiFi, uruchomienie wybranej aplikacji, podłączenie urządzenia do ładowarki czy spadek naładowania baterii do określonego poziomu. Część kontekstów ma określony czas trwania np. gdy poziom naładowania baterii zawiera się w przedziale 10-20%, ale są też konteksty typu event (zdarzenie), które wywołują uruchomienie tylko tasku wejściowego (profil uaktywniany takim kontekstem jest aktywny tylko przez chwilę).

Akcja

Akcję można opisać jak polecenie. Z akcji składają się taski. Akcją może być komenda warunkowa if albo polecenie włączenia WiFi. W taskerze akcje dzieli się na dwie grupy. Akcje zwykłe oraz akcje typu ustawienie. Te drugie odpowiedzialne są zmiany ustawień systemu (np. poziomu głośności czy włączenia Bluetooth). Akcje ustawień mają dość charakterystyczną cechę. Jeśli wykonane zostaną w tasku wejściowym profilu to po dezaktywacji profilu same przywrócą się do poprzedniej wartości. Przykładowo jeśli stworzymy profil noc, który ma być aktywny miedzy godzinami 23, a 7 rano i w tasku wejściowym dodamy akcję wyłączającą WiFi to rano gdy profil przestanie być aktywny WiFi automatycznie zostanie włączone mimo, że takiej akcji nie ma w tasku wyjściowym profilu. Akcje ustawień oznaczone są ikoną małego trybika.

Projekt

Projekt jest zbiorem profili i tasków, które tworzą jedną całość np. zarządzają ustawieniami telefonu w zależności od lokalizacji. Dzięki podziałowi profili na projekty można zachować porządek w Taskerze i łatwiej jest wyeksportować pliki dla innego użytkownika.

Wtyczka

Jak wiele innych aplikacji tak i Tasker ma możliwość korzystania z wtyczek dzięki czemu rozszerzane są możliwości programu. Pluginy mogą dodawać nowe akcje, konteksty oraz zmienne.

Interfejs Taskera

Główny ekran Taskera ma na górze 4 zakładki (z włączonym Beginner Mode tylko 3 zakładki): Profiles, Tasks, Scenes i Vars (czyli odpowiednio Profile, Taski, Sceny i Zmienne). Na dolnym pasku znajdują się zakładki projektów. W lewym górnym rogu znajduje się ikona Taskera służąca do włączania i wyłączania usługi programu (należy dłużej przytrzymać naciśniętą ikonę). W prawym dolnym rogu ekranu zawsze widoczny jest klawisz +, za pomocą którego można dodawać nowe profile, taski, sceny lub zmienne w zależności, od tego, która zakładka jest aktywna.

Oto przykładowy widok zakładki Profile.

Zakładka Zadania oraz Sceny.

Zakładka Zmienne

Dłuższe dotknięcie profilu, tasku, sceny czy zmiennej powoduje wyświetlenie paska z opcjami związanymi z danym elementem. Podobnie dłuższe dotknięcie górnych i dolnych (projektów) zakładek powoduje wyświetlenie dodatkowego menu z opcjami dla tych elementów. W przypadku zakładek projektów pozwala to dodać nowy projekt, importować projekt, usunąć/zmienić nazwę/ikonę/pozycję istniejącego projektu lub go wyeksportować. W przypadku zakładek Profile, Taski i Sceny dłuższe dotknięcie pozwala głównie na import odpowiednio profili, tasków i scen.

Importowanie projektów, profili, tasków, scen

Omawiając interfejs doszliśmy do bardzo ważnej funkcjonalności Taskera, a mianowicie importu i eksportu jego zawartości. Dzięki temu możemy nasz projekt/profil/task wyeksportować by ktoś mógł wykorzystać go w swoim urządzeniu.

Eksport elementów polega na dłuższym dotknięciu danego projektu/profilu/tasku/sceny i wybraniu opcji Menu / Export / XML to SD. W trakcie eksportu w pamięci urządzenia tworzone są pliki:

  • xxxxxx.prj.xml w folderze /sdcard/Tasker/projects/ dla projektów,
  • xxxxxx.prf.xml w folderze /sdcard/Tasker/profiles/ dla profili,
  • xxxxxx.tsk.xml w folderze /sdcard/Tasker/projects/ dla tasków,
  • xxxxxx.scn.xml w folderze /sdcard/Tasker/scenes/ dla scen.

W podobny sposób wykonuje się import elementów Taskera. Pliki xml należy skopiować do odpowiednich folderów w zależności od typów i następnie dłużej nacisnąć odpowiednią zakładkę projektu, profilu, tasku lub sceny i wybraniu opcji Import.

Należy pamiętać, że Tasker zaimportuje dane tylko wtedy gdy wersja aplikacji jest taka sama lub wyższa niż na urządzeniu gdzie przeprowadzono eksport. Czasem powoduje to konieczność zainstalowania Taskera w wersji beta o czym pisałem w pierwszym wpisie.

Kopia zapasowa

Mówi się, że "ludzie dzielą się na tych co robią kopie zapasowe i na tych co... będą je robić". Kopia zapasowa w przypadku Taskera to bardzo ważna sprawa. Utrata tworzonych przez długie tygodnie profili byłaby katastrofą. Autor Taskera pomyślał o tym i po wybraniu Menu / Data mamy dostęp do opcji Backup i Restore. W ten sposób utworzony backup zawiera wszystkie projekty, profile, taski i sceny jakie mamy wprowadzone w Taskerze.

Ja osobiście polecam włączenie jeszcze tworzenie automatycznych kopii bezpieczeństwa. Dokonuje się tego w ustawieniach aplikacji na zakładce MISC. Opcja nazywa się Maximum Auto-Backup Age i można wybrać jak stare kopie bezpieczeństwa ma przechowywać aplikacja. Ja ustawiam tą opcję na 2 dni. Mam wtedy pewność, że jeśli coś zmienię bez utworzenia ręcznej kopii bezpieczeństwa to w ciągu 2 dni zauważę, że coś jest nie tak i przywrócę poprzednia wersję.

Na dziś to koniec. W następnym wpisie zaczniemy tworzyć profile czyli zaczniemy prawdziwą zabawę z Taskerem.

22 lipca 2014

Zaczynamy przygodę z Taskerem

Smartfony za mało "smart"

Żyjemy w czasach, w których posiadanie smartfonu jest na porządku dziennym. Czasem jednak ma się wrażenie, że urządzenia te są za mało "smart". Czemu w, jak wynika z nazwy, inteligentnych telefonach trzeba wciąż powtarzać te same czynności, czemu te urządzenia mają nieraz problemy w "dogadywaniu się" między sobą? Czemu w tak małym stopniu możemy nimi sterować głosem? Odpowiedzią na te pytania jest Tasker. Przynajmniej dla urządzeń pracujących pod kontrolą systemu Android. W czym pomoże nam Tasker? W zautomatyzowaniu wielu powtarzalnych czynności, w dopasowaniu sposobu pracy systemu operacyjnego do naszego trybu życia, w ulepszeniu komunikacji głosowej ze smartfonem czy tabletem i w końcu w ulepszeniu komunikacji między różnymi urządzeniami. Tak naprawdę głównym ograniczenie jest nasza pomysłowość.

Dlaczego Tasker?

Osoby, które przeglądały zasoby sklepu Google Play zapewne trafiły na programy podobne do Taskera takie jak Llama, Locale czy Automagic. Czemu więc Tasker? Dla mnie ta aplikacja, mimo trudnego do ogarnięcia interfejsu, jest najprostszy w obsłudze i oferuje najwięcej możliwości. Poza tym najbardziej przypomina mi środowisko programistyczne dzięki czemu jeśli ktoś miał do czynienia z jakimkolwiek językiem programowania szybko się w nim odnajdzie. Kolejnym argumentem jest zwykłe przyzwyczajenie gdyż używam go już od 5 lat.

Instalujemy Taskera

Taskera można zakupić w sklepie Google Play. Jego dzisiejsza cena to 14,99 zł.

Aplikację można też pobrać ze strony jego autora. Wersja ze strony działa przez 7 dni bez konieczności płacenia. Dzięki temu można się porządnie zapoznać z aplikacją i upewnić się czy chcemy wydać na niego pieniądze. Należy pamiętać, że do zaintalowanie pliku apk pobranego ze strony autora aplikacji konieczne jest włączenie opcji Nieznane źródła, którą znajdziemy w Ustawiania / Zabezpieczenia.

Należy pamiętać, że by móc zaimportować profile Taskera trzeba posiadać zainstalowaną tą samą lub nowszą wersję aplikacji. Ja czasem korzystam z wersji beta programu więc by móc zaimportować profile wyeksportowane przeze mnie należy taką też zainstalować. Są one dostępne na tej stronie. Przy każdym wyeksportowanym profilu będę podawał wymaganą do importu wersję Taskera.

OK, Tasker zainstalowany i co dalej?

Gdy Taskera mamy już zainstalowanego to czeka nas trochę nauki. Niestety ogromne możliwości aplikacji wiążą się z rozbudowanym i początkowo skomplikowanym interfejsem. Jeśli masz chęć poświęcić trochę czasu by poznać tą aplikację to ten blog jest dla Ciebie. Kolejne wpisy będą prowadzić Cię od podstaw do zaawansowanych możliwości Taskera. Gdyby to było dla Ciebie za mało zachęcam do odwiedzenia strony pomocy do aplikacji oraz wątków dotyczących Taskera na forum android.com.pl, na którym staram się udzielać w miarę możliwości.

Co znajdziecie na tym blogu

Na tym blogu chciałbym stworzyć kurs umożliwiający opanowanie Taskera, jego obsługi i możliwości. Zacznę od omówienia interfejsu, nazewnictwa elementów i najprostszych profili i stopniowo będę zwiększał poziom trudności. Wszystkie części kursu będę opierał na wykonywaniu profili, które mogą się przydać. Każdy z profili będzie udostępniony do pobrania i zaimportowania do swojego systemu.

Poza tym stopniowo będę opisywał wszystkie wykorzystywane wtyczki, akcje, eventy oraz stany czyli powstanie polskie tłumaczenie pomocy do Taskera. Oczywiście blog jest dla czytelników i to w jakim kierunku będzie zmierzł zamierzam uzależnić od tego czego Wy czytelnicy będziecie potrzebowali. Także zapraszam do komentowania. Na wszelkie pytania postaram się odpowiedzieć, a z problemami pomóc.