Come inviare e ricevere un valore variabile in un'attività?


9

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

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-urie 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 amutilizzando --esaargomento. 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.


Sto cominciando a pensare che devo passare array di stringhe e non ho idea di come procedere.
Firelord

Non sono sicuro che leggendo questo diritto, hai uno script adb, una volta finito, devi passare una variabile a un'attività in tasker corretta? Ma l'attività in tasker non sta ricevendo questa variabile e si desidera che riceva la variabile. Sono sulla strada giusta?
Matt07211,

È uno script bash, ma sì, alla fine voglio chiamare un'attività usando adb e inviargli una variabile.
Firelord

Ok, pubblicherò tutte le informazioni utili se ne trovo, e buona fortuna
Matt07211

Per favore, scusami se sembro stupido - perché sei ovviamente più avanzato in Tasker di me - ma non potresti semplicemente fare in modo che il tuo script scriva i dati variabili in un file di testo prima di uscire e poi lasci che Tasker legga quel file a determinate condizioni e imposti le variabili da esso?
puro

Risposte:


1

Basato sui risultati di @ firelord e amsul documento in-app (output di am, no arg). Questo ha funzionato sul mio telefono con 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'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.