11 votos

¿Cómo enviar un valor variable y recibirlo en una tarea?

Tengo un OnePlus One con Cyanogen OS 12 rooteado y Tasker v4.8 . Tengo un bash script en PC que al salir requiere que se ejecute una tarea de Tasker. He visto la pregunta Ejecutar una tarea tasker a través de SSHDroid (o adb shell) y aunque la respuesta aceptada no funcionó en mi Android, la solución es muy sencilla. Para llamar a una tarea, haz:

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"   

Sin embargo, eso es todo lo que puedo hacer con éxito. Durante la salida, mi script necesita pasar el estado de salida a la tarea para que pueda continuar mi procesamiento en el dispositivo basado en el resultado de script.

El guía oficial para invocar tareas está destinado a los programadores, así que no me sirvió de nada. Según el hilo Lanzar la tarea a través de la intención He intentado varias formas de pasar el valor de una variable, pero sin éxito.

Cuando invocamos una tarea desde otra tarea, se nos da la flexibilidad de pasar valores usando dos variables. Esas dos variables pueden ser recibidas por la tarea invocada utilizando el nombre %par1 y %par2 . En mi tarea de demostración, todo lo que estoy haciendo es Alerta → Flash → Texto → Show me: %arg1 %par1 .

\# For demonstration only, I created a task named "lol"

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" "par1" --es "varValues" "received"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" "%par1" --es "varValues" "received"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" "Par1" --es "varValues" "received"    # I also changed the variable name par1 to Par1 in task
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" "%Par1" --es "varValues" "received"  

Todos esos comandos se ejecutan con esta salida

Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0

Incluso el envío de esta emisión 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

Pero llamar a la tarea directamente y luego enviar el valor de la variable no hace nada.

Entonces, ¿dónde está el fallo en mi planteamiento y/o cómo envío y recibo en un valor variable en una tarea sólo utilizando la línea de comandos ?

Nota que no estoy buscando una solución. Soy perfectamente capaz de idear muchas soluciones para recibir el estado de salida de mi script en el dispositivo, pero el uso de intent parece ser la solución más sencilla de ellas y quiero aprender esta técnica también.

Actualización

He planteado mi consulta en:

He recibido esta respuesta de Pent, tanto por correo electrónico como en el foro

Tendrías que ser capaz de añadir un extra StringArrayList a la llamada de adb con -e, no sé si adb puede hacer eso.

Si es así, para ver el formato puedes mirar TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , la función addLocalVariable, si entiendes java.

Y eso es exactamente lo que Más tarde conjeturé después de publicar esta pregunta.

Según la respuesta aquí Creo que se puede pasar un array de cadenas con adb. Así que intenté algunas consultas pero de nuevo me encontré con un callejón sin salida.

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"time"}'
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"time"}'
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION\_TASK --es "task\_name" "lol" --es "varNames" '{"par1"\\,"arg1"}' --es "varValues" '{"received"\\,"again"}'

También he convertido la intención a URI utilizando am to-intent-uri y he intentado enviar el URI de la intención directamente, sin éxito de nuevo.

Nueva actualización

Basado en las lecturas a saber 1 , 2 y 3 Estoy absolutamente seguro de que se puede pasar una matriz de cadenas por adb shell am utilizando --esa argumento. Ejemplo:

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

Dicho esto, esta consulta sigue fallando:

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"

Nueva actualización #2

Puedes utilizar Android 6.0.1 de serie como campo de pruebas.

0 votos

Empiezo a pensar que tengo que pasar arrays de cadenas y no tengo ni idea de cómo proceder con eso.

0 votos

No estoy seguro de leer bien, ¿tienes un adb script, cuando termina, tiene que pasar una variable a una tarea en tasker correcto? Pero la tarea en tasker no está recibiendo esta variable, y usted quiere que reciba la variable. ¿Estoy en el camino correcto?

0 votos

Es un bash script, pero sí, al final quiero llamar a una tarea usando adb y enviarle una variable.

1voto

Michael Puntos 4361

Basado en los hallazgos de @firelord y am (salida de am , no arg). Esto funcionó en mi teléfono corriendo 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'

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X