Comment envoyer et recevoir une valeur variable dans une tâche?

9

J'ai un OnePlus One avec Cyanogen OS 12 enraciné et Tasker v4.8 . J'ai un script bash sur PC qui, à sa sortie, nécessite l'exécution d'une tâche de Tasker. J'ai vu la question Exécuter une tâche de tâche via SSHDroid (ou shell adb) et bien que la réponse acceptée ne fonctionne pas sur mon Android, la solution est très simple. Pour appeler une tâche, procédez comme suit:

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

Cependant, c'est tout ce que je peux faire avec succès. Pendant la sortie, mon script doit passer l'état de sortie à la tâche afin que je puisse continuer mon traitement sur l'appareil en fonction du résultat du script.

Le guide officiel pour invoquer des tâches est destiné aux programmeurs, donc cela ne m'a pas aidé. Selon le thread Launch Task via Intent, j'ai tenté diverses façons de transmettre la valeur d'une variable, mais en vain.

Lorsque nous appelons une tâche à partir d'une autre tâche, nous avons la possibilité de passer des valeurs à l'aide de deux variables. Ces deux variables peuvent être reçues par la tâche invoquée en utilisant le nom %par1et %par2. Dans ma tâche de démonstration, je ne fais qu'Alerte → Flash → Texte → Show me: %arg1 %par1.

# Pour démonstration uniquement, j'ai créé une tâche nommée "lol"

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nom_tâche" "lol" --es "varNames" "par1" --es "varValues" "received"
shell adb su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nom_tâche" "lol" --es "varNames" "% par1" --es "varValues" "received"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nom_tâche" "lol" --es "varNames" "Par1" --es "varValues" "reçu" # J'ai également modifié le nom de variable par1 à Par1 dans la tâche
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% Par1" --es "varValues" "received"  

Toutes ces commandes s'exécutent avec cette sortie

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

Même l'envoi de cette émission fonctionne

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

Mais appeler la tâche directement puis envoyer la valeur de la variable ne fait rien.

Alors, où est la faute dans mon approche et / ou comment envoyer et recevoir une valeur variable dans une tâche uniquement en utilisant la ligne de commande ?

Notez que je ne cherche pas de solution de contournement. Je suis parfaitement capable de trouver de nombreuses solutions de contournement pour recevoir le statut de sortie de mon script sur l'appareil, mais l'utilisation de l'intention semble être la solution la plus simple d'entre eux et je souhaite également apprendre cette technique.

Mise à jour

J'ai posé ma question à:

J'ai reçu cette réponse de Pent, à la fois par e-mail et sur le forum

Vous devez pouvoir ajouter un StringArrayList supplémentaire à l'appel adb avec -e, je ne sais pas si adb peut le faire.

Si c'est le cas, pour voir le format, vous pouvez consulter TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , la fonction addLocalVariable, si vous comprenez java.

Et c'est exactement ce que j'ai supposé plus tard après avoir posté cette question.

Selon la réponse ici , je crois qu'un tableau de chaînes peut être passé en utilisant adb. J'ai donc tenté quelques requêtes, mais j'ai de nouveau rencontré une impasse.

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 "} '
shell adb su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "nom_tâche" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" reçu "\," à nouveau "}'

J'ai également converti l'intention en URI en utilisant am to-intent-uriet essayé d'envoyer directement l'URI d'intention, sans succès.

Nouvelle mise à jour

Basé sur les lectures à savoir. 1 , 2 et 3 , je suis absolument sûr qu'un tableau de chaînes peut être passé en adb shell amutilisant un --esaargument. Exemple:

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

Cela dit, cette requête échoue toujours:

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"

Nouvelle mise à jour # 2

Vous pouvez utiliser le stock Android 6.0.1 comme terrain d'essai.

Seigneur du feu
la source
Je commence à penser que je dois passer des tableaux de chaînes et je ne sais pas comment procéder.
Firelord
Je ne sais pas si la lecture de ce droit, vous avez un script adb, une fois terminé, doit passer une variable à une tâche dans tasker correct? Mais la tâche dans tasker ne récupère pas cette variable et vous voulez qu'elle reçoive la variable. Suis-je sur la bonne voie?
Matt07211
C'est un script bash, mais oui, à la fin, je veux appeler une tâche en utilisant adb et lui envoyer une variable.
Firelord
D'accord, je publierai toutes les informations utiles si j'en trouve, et bonne chance
Matt07211
Veuillez m'excuser si cela semble stupide - parce que vous êtes évidemment plus avancé dans Tasker que moi - mais ne pourriez-vous pas simplement faire en sorte que votre script écrive les données variables dans un fichier texte avant de quitter, puis laissez Tasker lire ce fichier sous certaines conditions et définir les variables de celui-ci?
pure.by

Réponses:

1

Sur la base des conclusions de @ firelord et du document intégré à l' amapplication (sortie de am, aucun argument). Cela a fonctionné sur mon téléphone exécutant 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'
Kenneth Ho
la source