Ich habe ein OnePlus One mit verwurzeltem Cyanogen OS 12 und Tasker v4.8 . Ich habe ein Bash-Skript auf dem PC, das beim Beenden die Ausführung einer Tasker-Aufgabe erfordert. Ich habe die Frage " Ausführen einer Tasker-Aufgabe über SSHDroid (oder ADB-Shell)" gesehen. Obwohl die akzeptierte Antwort auf meinem Android nicht funktioniert hat, ist die Lösung sehr einfach. Um eine Aufgabe aufzurufen, gehen Sie wie folgt vor:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
Das ist jedoch alles, was ich erfolgreich tun kann. Während des Beenden muss mein Skript den Beendigungsstatus an die Aufgabe übergeben, damit ich meine Verarbeitung auf dem Gerät basierend auf dem Ergebnis des Skripts fortsetzen kann.
Der offizielle Leitfaden zum Aufrufen von Aufgaben ist für Programmierer gedacht, das hat mir also nicht geholfen. Gemäß dem Thread Launch Task via Intent habe ich verschiedene Möglichkeiten versucht, den Wert einer Variablen zu übergeben, aber ohne Erfolg.
Wenn wir eine Aufgabe von einer anderen Aufgabe aus aufrufen, erhalten wir die Flexibilität, Werte mithilfe von zwei Variablen zu übergeben. Diese beiden Variablen können von der aufgerufenen Task unter Verwendung des Namens %par1
und empfangen werden %par2
. In meiner Demo-Aufgabe mache ich nur Alarm → Flash → Text → Show me: %arg1 %par1
.
# Nur zur Demonstration habe ich eine Aufgabe mit dem Namen "lol" erstellt. ADB-Shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" "par1" --es "varValues" "empfangen" ADB-Shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" "% par1" --es "varValues" "empfangen" ADB-Shell su -c bin Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" "Par1" --es "varValues" "erhalten" # Ich habe auch die geändert Variablenname par1 bis Par1 in Aufgabe ADB-Shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" "% Par1" --es "varValues" "empfangen"
Alle diese Befehle werden mit dieser Ausgabe ausgeführt
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Sogar das Senden dieser Sendung funktioniert
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
Das direkte Aufrufen der Aufgabe und das anschließende Senden des Variablenwerts bewirkt jedoch nichts.
Wo liegt also der Fehler in meinem Ansatz und / oder wie sende und empfange ich einen variablen Wert in einer Aufgabe nur über die Befehlszeile ?
Beachten Sie, dass ich keine Problemumgehung suche. Ich bin perfekt in der Lage, viele Problemumgehungen zu finden, um den Exit-Status meines Skripts auf dem Gerät zu erhalten, aber die Verwendung von Intent scheint die einfachste Lösung zu sein, und ich möchte diese Technik auch lernen.
Aktualisieren
Ich habe meine Anfrage gestellt bei:
- Offizielle Foren - Tasker: Rufen Sie eine Aufgabe über die Befehlszeile auf und übergeben Sie ihr Variablen und / oder Daten
- subreddit Tasker: Können Variablen übergeben werden, wenn eine Aufgabe über eine Befehlszeile aufgerufen wird?
- privat an Pent, den Entwickler von Tasker, per E-Mail
Ich habe diese Antwort von Pent sowohl per E-Mail als auch im Forum erhalten
Sie müssten in der Lage sein, dem adb-Aufruf mit -e eine zusätzliche StringArrayList hinzuzufügen. Sie wissen nicht, ob adb dies kann.
Wenn ja, um das Format zu sehen, können Sie TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , die Funktion addLocalVariable, suchen, wenn Sie Java verstehen.
Und genau das habe ich später vermutet, nachdem ich diese Frage gestellt hatte.
Gemäß der Antwort hier glaube ich, dass ein String-Array mit adb übergeben werden kann. Also habe ich einige Fragen gestellt, bin aber wieder auf eine Sackgasse gestoßen.
ADB-Shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"Zeit "} ' ADB-Shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"Zeit "} ' ADB-Shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "Aufgabenname" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" erhielt "\," wieder "}'
Ich habe die Absicht auch mithilfe von URI in URI konvertiert am to-intent-uri
und versucht, die Absichts-URI direkt zu senden, ohne dass dies erneut erfolgreich war.
Neues Update
Basierend auf den Messwerten nämlich. 1 , 2 und 3 , ich bin absolut sicher, dass ein String-Array adb shell am
mit --esa
Argument übergeben werden kann. Beispiel:
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
Diese Abfrage schlägt jedoch immer noch fehl:
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"
Neues Update # 2
Sie können Standard Android 6.0.1 als Testgelände verwenden.