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:
- foros oficiales - Tasker : Invocar una tarea desde la línea de comandos y pasarle variables y/o datos
- subreddit Tasker : ¿Se pueden pasar variables cuando se llama a una tarea desde una línea de comandos?
- en privado a Pent, el desarrollador de Tasker, utilizando el correo electrónico
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.
0 votos
De acuerdo, publicaré cualquier información útil si encuentro alguna, y buena suerte
0 votos
@pure.by: gracias por sugerir esta alternativa y sí, puedo usarla, y ya usé otra alternativa para resolver el problema. He publicado esta pregunta para aprender el método más corto para alcanzar el objetivo.