Mam OnePlus One z zrootowanym Cyanogen OS 12 i Tasker v4.8 . Mam skrypt bash na PC, który przy wychodzeniu wymaga wykonania zadania Taskera. Widziałem pytanie Uruchamianie zadania zadania za pośrednictwem SSHDroid (lub powłoki adb) i chociaż zaakceptowana odpowiedź nie działała na moim Androidzie, rozwiązanie jest bardzo proste. Aby wywołać zadanie, wykonaj:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
Jednak to wszystko, co mogę z powodzeniem zrobić. Podczas wychodzenia mój skrypt musi przekazać status wyjścia do zadania, aby móc kontynuować przetwarzanie na urządzeniu na podstawie wyniku skryptu.
Oficjalny przewodnik do zadań odwołujących jest przeznaczona dla programistów, więc mi to nie pomoże. W wątku Uruchom zadanie za pośrednictwem zamiaru próbowałem różnych sposobów przekazać wartość zmiennej, ale bezskutecznie.
Kiedy wywołujemy zadanie z innego zadania, mamy swobodę przekazywania wartości przy użyciu dwóch zmiennych. Te dwie zmienne mogą być odebrane przez wywoływane zadanie przy użyciu nazwy %par1
i %par2
. W moim zadaniu demonstracyjnym wszystko, co robię, to Alert → Flash → Tekst → Show me: %arg1 %par1
.
# Tylko do celów demonstracyjnych, utworzyłem zadanie o nazwie „lol” adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” „par1” --es „varValues” „otrzymano” adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” „% par1” --es „varValues” „otrzymano” adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” „Par1” --es „varValues” „otrzymano” # Zmieniłem również nazwa zmiennej od par1 do Par1 w zadaniu adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” „% Par1” --es „varValues” „otrzymano”
Wszystkie te polecenia są wykonywane z tym wyjściem
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Nawet wysyłanie tej transmisji działa
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK -d "task:lol" --es "arg1" "received" # I setup a profile to listen to this intent and receive extra from it in a task linked to profile
Ale bezpośrednie wywołanie zadania, a następnie wysłanie wartości zmiennej nic nie robi.
Więc gdzie jest błąd w moim podejściu i / lub jak wysyłać i odbierać zmienne wartości w zadaniu tylko za pomocą wiersza poleceń ?
Pamiętaj , że nie szukam obejścia. Jestem w stanie wymyślić wiele obejść, aby uzyskać status wyjścia ze skryptu na urządzeniu, ale użycie zamiaru wydaje się być najprostszym rozwiązaniem z nich i chcę nauczyć się tej techniki.
Aktualizacja
Podniosłem zapytanie o:
- oficjalne fora - Tasker: Wywołaj zadanie z wiersza poleceń i przekaż do niego zmienne zmienne i / lub dane
- subreddit Tasker: Czy zmienne mogą być przekazywane, gdy zadanie jest wywoływane z wiersza poleceń?
- prywatnie Pentowi, twórcy Taskera, za pomocą poczty elektronicznej
Otrzymałem tę odpowiedź od Pent, zarówno przez e-mail, jak i na forum
Będziesz musiał móc dodać StringArrayList dodatkowo do wywołania adb za pomocą -e, nie wiem, czy adb może to zrobić.
Jeśli tak, aby zobaczyć format, możesz poszukać TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , funkcja addLocalVariable, jeśli rozumiesz java.
I to właśnie przypuszczałem później po opublikowaniu tego pytania.
Na podstawie odpowiedzi tutaj sądzę, że tablicę ciągów można przekazać za pomocą adb. Próbowałem więc zapytać, ale znowu spotkałem ślepy zaułek.
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” „{„ arg1 ”}” --es „varValues” „{” czas „}” adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” „{„ par1 ”}” --es „varValues” „{” czas „}” adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es „nazwa_zadania” „lol” --es „varNames” ”{„ par1 ”\,„ arg1 ”}” --es „varValues „” {„otrzymał„ \ ”,„ ponownie ”}”
Przekształciłem również zamiar na URI za pomocą am to-intent-uri
i próbowałem wysłać zamierzony URI bezpośrednio, bez powodzenia.
Nowa aktualizacja
Na podstawie odczytów mianowicie. 1 , 2 i 3 , jestem absolutnie pewien, że tablicę łańcuchów można przekazać za adb shell am
pomocą --esa
argumentu. Przykład:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --esa "par" "lol, cat" # value lol goes in par1 variable and value cat goes in par2 variable
To powiedziawszy, to zapytanie nadal nie działa:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es task_name "lol" --esa varNames "arg1, par1" --esa varValues "lol, cat"
Nowa aktualizacja nr 2
Możesz użyć standardowego Androida 6.0.1 jako poligonu testowego.