Jak wysłać wartość zmiennej i otrzymać ją w zadaniu?

9

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 %par1i %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:

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-urii 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 ampomocą --esaargumentu. 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.

Firelord
źródło
Zaczynam myśleć, że muszę przekazywać tablice ciągów i nie mam pojęcia, jak to zrobić.
Firelord
Nie jestem pewien, czy czytając to prawo, masz skrypt adb, kiedy skończysz, musisz przekazać zmienną do zadania w zadaniu poprawnie? Ale zadaniem w Tasker nie jest otrzymywanie tej zmiennej, a ty chcesz, aby otrzymała zmienną. Czy jestem na dobrej drodze?
Matt07211
Jest to skrypt bash, ale tak, na koniec chcę wywołać zadanie za pomocą adb i wysłać do niego zmienną.
Firelord
Ok, opublikuję wszelkie pomocne informacje, jeśli je znajdę, i powodzenia
Matt07211,
Przepraszam, jeśli brzmię głupio - bo jesteś oczywiście bardziej zaawansowany w Taskerze niż ja - ale czy nie możesz po prostu zmusić skryptu do zapisania danych zmiennych do pliku tekstowego przed wyjściem, a następnie pozwolić Taskerowi odczytać ten plik pod pewnymi warunkami i ustawić zmienne z tego?
pure.by

Odpowiedzi:

1

Na podstawie ustaleń @ firelord i amdokumentu w aplikacji (wynik am, brak argumentu). Działa to na moim telefonie z wersją 6.0.1:

$ su -c 'am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es task_name TASK_NAME --esal varNames %VAR_NAME1,%VAR_NAME2 --esal varValues VAR_VALUE1,VAR_VALUE2'
Kenneth Ho
źródło