Wie sende ich einen variablen Wert an eine Aufgabe und empfange ihn in einer Aufgabe?

9

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

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-uriund 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 ammit --esaArgument ü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.

Feuerlord
quelle
Ich fange an zu denken, dass ich String-Arrays übergeben muss, und ich habe keine Ahnung, wie ich damit vorgehen soll.
Feuerlord
Sind Sie sich nicht sicher, ob Sie beim Lesen dieses Rechts ein ADB-Skript haben, das nach Abschluss eine Variable an eine Aufgabe im Tasker übergeben muss? Die Aufgabe im Tasker empfängt diese Variable jedoch nicht, und Sie möchten, dass sie die Variable empfängt. Bin ich auf dem richtigen Weg?
Matt07211
Es ist ein Bash-Skript, aber ja, am Ende möchte ich eine Aufgabe mit adb aufrufen und eine Variable an sie senden.
Feuerlord
Okay, werde alle hilfreichen Informationen posten, wenn ich welche finde, und viel Glück
Matt07211
Bitte entschuldigen Sie, wenn ich dumm klinge - weil Sie in Tasker offensichtlich fortgeschrittener sind als ich -, aber Sie könnten Ihr Skript nicht einfach dazu bringen, die variablen Daten vor dem Beenden in eine Textdatei zu schreiben, und Tasker diese Datei dann unter bestimmten Bedingungen lesen und festlegen lassen die Variablen daraus?
pure.by

Antworten:

1

Basierend auf den Ergebnissen von @ firelord und amdem In-App-Dokument (Ausgabe von am, kein Argument). Dies funktionierte auf meinem Telefon mit 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
quelle