Eu tenho um OnePlus One com Cyanogen OS 12 enraizado e Tasker v4.8 . Eu tenho um script bash no PC que, ao sair, exige que uma tarefa do Tasker seja executada. Vi a pergunta Executando uma tarefa do Tasker via SSHDroid (ou shell adb) e, embora a resposta aceita não tenha funcionado no meu Android, a solução é muito simples. Para chamar uma tarefa, faça:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
No entanto, é tudo o que posso fazer com sucesso. Durante a saída, meu script precisa passar o status de saída para a tarefa, para que eu possa continuar meu processamento no dispositivo com base no resultado do script.
O guia oficial para invocar tarefas é destinado a programadores, de modo que não me ajudou. De acordo com o tópico Iniciar Tarefa via Intent , tentei várias maneiras de passar o valor de uma variável, mas sem sucesso.
Quando invocamos uma tarefa de outra, temos a flexibilidade de passar valores usando duas variáveis. Essas duas variáveis podem ser recebidas pela tarefa chamada usando o nome %par1
e %par2
. Na minha tarefa de demonstração, tudo o que estou fazendo é Alerta → Flash → Texto → Show me: %arg1 %par1
.
# Apenas para demonstração, criei uma tarefa chamada "lol" shell adb su -c estou transmitindo -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "par1" --es "varValues" "received" shell adb su -c sou transmitido -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% par1" --es "varValues" "received" shell adb su -c estou transmitindo -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "Par1" --es "varValues" "received" # Eu também alterei o nome da variável par1 a Par1 na tarefa shell adb su -c sou transmitido -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% Par1" --es "varValues" "received"
Todos esses comandos são executados com esta saída
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Mesmo enviando esta transmissão funciona
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
Mas chamar a tarefa diretamente e depois enviar o valor da variável não faz nada.
Então, onde está a falha na minha abordagem e / ou como envio e recebo um valor variável em uma tarefa usando apenas a linha de comando ?
Observe que não estou procurando uma solução alternativa. Sou perfeitamente capaz de apresentar várias soluções alternativas para receber o status de saída do meu script no dispositivo, mas usar intent parece ser a solução mais direta deles e quero aprender essa técnica também.
Atualizar
Eu levantei minha consulta em:
- fóruns oficiais - Tasker: invocar uma tarefa da linha de comando e passar variáveis e / ou dados para ela
- Tasker: As variáveis podem ser passadas quando uma tarefa é chamada de uma linha de comando?
- em particular para Pent, o desenvolvedor do Tasker, usando e-mail
Recebi esta resposta do Pent, por e-mail e no fórum
Você precisaria adicionar um StringArrayList extra à chamada adb com -e, não sei se o adb pode fazer isso.
Nesse caso, para ver o formato, você pode procurar TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , a função addLocalVariable, se você entender java.
E foi exatamente isso que supus depois de postar essa pergunta.
De acordo com a resposta aqui , acredito que uma matriz de strings pode ser passada usando adb. Então, tentei fazer algumas perguntas, mas novamente encontrei um beco sem saída.
shell adb su -c sou transmitido -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"time "} ' shell adb su -c sou transmitido -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"time "} ' shell adb su -c sou transmitido -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" recebeu "\," novamente "}'
Também converti a intenção em URI usando am to-intent-uri
e tentei enviar a intenção diretamente, sem sucesso novamente.
Nova atualização
Com base nas leituras viz. 1 , 2 e 3 , tenho certeza absoluta de que uma matriz de strings pode ser passada adb shell am
usando o --esa
argumento Exemplo:
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
Dito isto, esta consulta ainda falha:
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"
Nova atualização # 2
Você pode usar o Android 6.0.1 como um campo de teste.
fonte
Respostas:
Com base nas descobertas do @ firelord e
am
no documento no aplicativo (saída deam
, no arg). Isso funcionou no meu telefone executando 6.0.1:fonte