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.