Ho un OnePlus One con Cyanogen OS 12 e Tasker v4.8 rooted . Ho uno script bash su PC che all'uscita richiede l'esecuzione di un compito di Tasker. Ho visto la domanda Esecuzione di un'attività tasker tramite SSHDroid (o shell adb) e sebbene la risposta accettata non funzionasse sul mio Android, la soluzione è molto semplice. Per chiamare un'attività, eseguire:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
Tuttavia, è tutto ciò che posso fare con successo. Durante l'uscita, il mio script deve passare lo stato di uscita all'attività in modo da poter continuare l'elaborazione sul dispositivo in base al risultato dello script.
La guida ufficiale per invocare compiti è pensata per i programmatori, quindi non mi ha aiutato. Per il thread Avvio attività tramite intento ho tentato in vari modi di passare il valore di una variabile, ma senza risultati.
Quando invochiamo un'attività da un'altra attività, ci viene data la flessibilità di passare valori usando due variabili. Queste due variabili possono essere ricevute dall'attività invocata usando il nome %par1
e %par2
. Nella mia attività demo, tutto quello che sto facendo è Avviso → Flash → Testo → Show me: %arg1 %par1
.
# Solo a scopo dimostrativo, ho creato un'attività denominata "lol" shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "par1" --es "varValues" "ricevuto" shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% par1" --es "varValues" "ricevuto" shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "Par1" --es "varValues" "ricevuto" # Ho anche cambiato il nome variabile da par1 a Par1 nell'attività shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% Par1" --es "varValues" "ricevuto"
Tutti questi comandi detti vengono eseguiti con questo output
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Anche l'invio di questa trasmissione funziona
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
Ma chiamare direttamente l'attività e quindi inviare il valore della variabile non fa nulla.
Quindi, dov'è l'errore nel mio approccio e / o come posso inviare e ricevere in un valore variabile in un'attività usando solo la riga di comando ?
Nota che non sto cercando una soluzione alternativa. Sono perfettamente in grado di trovare molte soluzioni alternative per ricevere lo stato di uscita dal mio script sul dispositivo, ma usare l'intento sembra essere la soluzione più semplice di loro e voglio imparare anche questa tecnica.
Aggiornare
Ho sollevato la mia domanda a:
- forum ufficiali - Tasker: richiama un'attività dalla riga di comando e passa variabili o dati a essa
- subreddit Tasker: le variabili possono essere passate quando un'attività viene chiamata da una riga di comando?
- privatamente a Pent, lo sviluppatore di Tasker, utilizzando la posta elettronica
Ho ricevuto questa risposta da Pent, sia tramite e-mail che sul forum
Dovresti essere in grado di aggiungere un extra StringArrayList alla chiamata adb con -e, non so se adb può farlo.
In tal caso, per vedere il formato puoi guardare TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , la funzione addLocalVariable, se capisci java.
E questo è esattamente ciò che in seguito ho ipotizzato dopo aver pubblicato questa domanda.
Per la risposta qui , credo che un array di stringhe possa essere passato usando adb. Quindi ho provato alcune domande ma ho incontrato di nuovo un vicolo cieco.
shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"time "}' shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"time "}' shell adb su -c sono trasmesso -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" ricevuto "\," di nuovo "}'
Ho anche convertito l'intento in URI usando am to-intent-uri
e ho provato a inviare direttamente l'URI di intenzione, senza successo.
Nuovo aggiornamento
Sulla base delle letture vale a dire. 1 , 2 e 3 , sono assolutamente sicuro che un array di stringhe può essere passato attraverso adb shell am
utilizzando --esa
argomento. Esempio:
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
Detto questo, questa query non riesce ancora:
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"
Nuovo aggiornamento n. 2
Puoi utilizzare Android 6.0.1 come base di prova.