Tengo un OnePlus One con Cyanogen OS 12 rooteado y Tasker v4.8 . Tengo un script bash en PC que al salir requiere la ejecución de una tarea Tasker. He visto la pregunta Ejecutar una tarea de tasker a través de SSHDroid (o adb shell) y aunque la respuesta aceptada no funcionó en mi Android, la solución es muy simple. Para llamar a una tarea, haga:
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 según el resultado del script.
La guía oficial para invocar tareas está destinada a programadores, por lo que no me ayudó. Según la tarea de inicio de subproceso a través de Intento , intenté varias formas de pasar el valor de una variable, pero fue en vano.
Cuando invocamos una tarea de otra tarea, se nos da la flexibilidad para pasar valores usando dos variables. La tarea invocada puede recibir esas dos variables 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
.
# Solo para demostración, creé una tarea llamada "lol" adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nombre_tarea" "lol" --es "varNames" "par1" --es "varValues" "recibido" adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% par1" --es "varValues" "recibido" adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nombre_tarea" "lol" --es "varNames" "Par1" --es "varValues" "recibido" # También cambié el nombre de variable par1 a Par1 en tarea adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nombre_tarea" "lol" --es "varNames" "% Par1" --es "varValues" "recibido"
Todos esos comandos se ejecutan con esta salida
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Incluso enviar esta transmisió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á la falla en mi enfoque y / o cómo envío y recibo un valor variable en una tarea solo usando la línea de comandos ?
Tenga en cuenta que no estoy buscando una solución alternativa. Soy perfectamente capaz de encontrar muchas soluciones para recibir el estado de salida de mi script en el dispositivo, pero usar la intención parece ser la solución más sencilla de ellas y también quiero aprender esta técnica.
Actualizar
Elevé mi consulta en:
- foros oficiales - Tasker: invoque una tarea desde la línea de comandos y pásele variables y / o datos
- Taser subreddit: ¿Se pueden pasar variables cuando se llama a una tarea desde una línea de comandos?
- en privado a Pent, el desarrollador de Tasker, usando correo electrónico
Recibí esta respuesta de Pent, tanto por correo electrónico como en el foro.
Tendría que poder agregar un StringArrayList extra a la llamada adb con -e, no sé si adb puede hacer eso.
Si es así, para ver el formato puede mirar TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , la función addLocalVariable, si entiende java.
Y eso es exactamente lo que más tarde deduje después de publicar esta pregunta.
Según la respuesta aquí , creo que se puede pasar una matriz de cadenas usando adb. Así que intenté algunas consultas pero nuevamente encontré 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 "'{" recibido "\," otra vez "}'
También convertí la intención a URI usando am to-intent-uri
e intenté enviar la intención URI directamente, sin éxito nuevamente.
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 adb shell am
mediante un --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 aún falla:
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
Puede usar el stock de Android 6.0.1 como campo de pruebas.
fuente
Respuestas:
Basado en los hallazgos de @ firelord y
am
en el documento de la aplicación (salida deam
, sin arg). Esto funcionó en mi teléfono con 6.0.1:fuente