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


9

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

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-urie 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 ammediante un --esaargumento. 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.


Estoy empezando a pensar que necesito pasar matrices de cadenas y no tengo idea de cómo proceder con eso.
Señor del fuego

No estoy seguro de si leer esto correctamente, tiene un script adb, cuando termina, tiene que pasar una variable a una tarea en Tasker ¿correcto? Pero la tarea en Tasker no es recibir esta variable, y desea que reciba la variable. ¿Estoy en el camino correcto?
Matt07211

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

Bien, publicaré cualquier información útil si encuentro alguna, y buena suerte
Matt07211

Disculpe si sueno estúpido, porque obviamente es más avanzado en Tasker que yo, pero no podría simplemente hacer que su script escriba los datos variables en un archivo de texto antes de salir y luego dejar que Tasker lea ese archivo bajo ciertas condiciones y establecer las variables de ella?
pure.by

Respuestas:


1

Basado en los hallazgos de @ firelord y amen el documento de la aplicación (salida de am, sin arg). Esto funcionó en mi teléfono con 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'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.