Como enviar e receber um valor variável em uma tarefa?


9

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

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-urie 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 amusando o --esaargumento 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.


Estou começando a pensar que preciso passar matrizes de string e não tenho ideia de como proceder com isso.
Firelord

Não tenho certeza se, ao ler isso corretamente, você tem um script adb, quando concluído, precisa passar uma variável para uma tarefa no tasker correta? Mas a tarefa no tasker não está recebendo essa variável e você deseja que ela receba a variável. Estou no caminho certo?
precisa saber é o seguinte

É um script bash, mas sim, no final, quero chamar uma tarefa usando adb e enviar uma variável para ela.
Firelord

Ok, vou postar qualquer informação útil se eu encontrar algum, e boa sorte
Matt07211

Por favor, desculpe-me se eu pareço estúpido - porque você é obviamente mais avançado no Tasker do que eu -, mas você não pode simplesmente fazer seu script gravar os dados variáveis ​​em um arquivo de texto antes de sair e deixar Tasker ler esse arquivo sob certas condições e definir as variáveis ​​dele?
Juliana

Respostas:


1

Com base nas descobertas do @ firelord e amno documento no aplicativo (saída de am, no arg). Isso funcionou no meu telefone executando 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'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.