Cyanogen OS 12とTasker v4.8をルート化したOnePlus Oneを使用しています。PCにbashスクリプトがあり、終了時にTaskerのタスクを実行する必要があります。SSHDroid(またはadb shell)を介してタスカータスクを実行するという質問を見てきましたが、私のAndroidでは受け入れられた回答が機能しませんでしたが、解決策は非常に簡単です。タスクを呼び出すには、次のようにします。
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
しかし、私ができることはそれだけです。終了時に、スクリプトの結果に基づいてデバイスで処理を続行できるように、スクリプトは終了ステータスをタスクに渡す必要があります。
タスクを呼び出すための公式ガイドはプログラマー向けであり、私には役に立ちませんでした。スレッドごとにIntent via Launch Taskを使用して、変数の値を渡すさまざまな方法を試みましたが、役に立ちませんでした。
別のタスクからタスクを呼び出す場合、2つの変数を使用して値を渡す柔軟性が与えられます。これら2つの変数は、名前%par1
とを使用して、呼び出されたタスクが受け取ることができます%par2
。私のデモタスクでは、アラート→フラッシュ→テキスト→を実行するだけShow me: %arg1 %par1
です。
#デモンストレーションのみのために、「lol」という名前のタスクを作成しました adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "par1" --es "varValues" "received" adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "%par1" --es "varValues" "received" adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "Par1" --es "varValues" "received"#また、タスクの変数名par1からPar1 adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "%Par1" --es "varValues" "received"
それらすべての言われたコマンドはこの出力で実行されます
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
この放送作品を送ることさえ
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
ただし、タスクを直接呼び出してから変数値を送信しても何も起こりません。
それで、私のアプローチのどこに欠陥があるのか、および/またはコマンドラインのみを使用してタスクの変数値をどのように送受信するのですか?
回避策を探しているわけではないことに注意してください。デバイス上のスクリプトから終了ステータスを受け取るための多くの回避策を完全に思いつくことができますが、インテントを使用することが最も簡単な解決策のようであり、このテクニックも学びたいです。
更新
私は私のクエリを提起しました:
- 公式フォーラム-Tasker:コマンドラインからタスクを呼び出し、変数やデータをタスクに渡します
- subreddit Tasker:コマンドラインからタスクが呼び出されたときに変数を渡すことができますか?
- Taskerの開発者であるPentに非公開でメールを使用
ペントからメールとフォーラムの両方でこの返信を受け取りました
-eを使用してadb呼び出しにStringArrayListを追加できる必要があります。adbがそれを実行できるかどうかはわかりません。
その場合、Javaを理解していれば、addLocalVariable関数であるTaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.javaの形式を確認できます。
そして、それはまさにこの質問を投稿した後に私が後で推測したことです。
ここでの答えによれば、文字列配列はadbを使用して渡すことができると思います。だから私はいくつかのクエリを試みましたが、再び行き止まりに遭遇しました。
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"時間「}」 adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"時間「}」 adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1" \、 "arg1"}' --es "varValues "'{"受信 "\、"再び "}'
また、インテントを使用してインテントをURIに変換し、インam to-intent-uri
テントURIを直接送信しようとしましたが、再び成功しませんでした。
新しいアップデート
読み取り値に基づいています。 1、2及び3、私は文字列の配列を通過させることができることを絶対的に確信してadb shell am
使用して--esa
引数を。例:
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
それでも、このクエリはまだ失敗します:
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"
新しいアップデート#2
テスト用のグラウンドとして、標準のAndroid 6.0.1を使用できます。