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 %par1
et %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 à:
- forums officiels - Tasker: invoquer une tâche depuis la ligne de commande et lui passer des variables et / ou des données
- subreddit Tasker: des variables peuvent-elles être transmises lorsqu'une tâche est appelée à partir d'une ligne de commande?
- en privé à Pent, le développeur de Tasker, en utilisant le courrier électronique
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-uri
et 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 am
utilisant un --esa
argument. 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.
la source
Réponses:
Sur la base des conclusions de @ firelord et du document intégré à l'
am
application (sortie deam
, aucun argument). Cela a fonctionné sur mon téléphone exécutant 6.0.1:la source