変数値をタスクに送信してタスクで受け取る方法は?


9

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

ただし、タスクを直接呼び出してから変数値を送信しても何も起こりません。

それで、私のアプローチのどこに欠陥があるのか​​、および/またはコマンドラインのみを使用してタスクの変数値をどのように送受信するのですか?

回避策を探しているわけではないことに注意してください。デバイス上のスクリプトから終了ステータスを受け取るための多くの回避策を完全に思いつくことができますが、インテントを使用することが最も簡単な解決策のようであり、このテクニックも学びたいです。

更新

私は私のクエリを提起しました:

ペントからメールとフォーラムの両方でこの返信を受け取りました

-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を直接送信しようとしましたが、再び成功しませんでした。

新しいアップデート

読み取り値に基づいています 12及び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を使用できます。


私は文字列配列を渡す必要があると思い始めており、それをどのように進めるかわかりません。
Firelord

この権利を読んでいるかどうか、あなたはadbスクリプトを持っているかどうかわかりません。終了したら、タスカーのタスクに変数を渡す必要がありますか?しかし、タスカーのタスクはこの変数を受け取っていないので、変数を受け取ってもらいたいのです。私は正しい軌道に乗っていますか?
Matt07211、2016年

これはbashスクリプトですが、ええと、最後にadbを使用してタスクを呼び出し、それに変数を送信します。
ファイアロード

わかりました。見つけた場合は役立つ情報と幸運を投稿します
Matt07211

私が愚かに聞こえたら失礼します—私よりも明らかにTaskerの方が上級だからです—しかし、終了する前にスクリプトに変数データをテキストファイルに書き込んで、特定の条件でTaskerにそのファイルを読み取らせて設定することはできませんでしたそれからの変数?
pure。によって2016

回答:


1

@firelordの調査結果とamアプリ内ドキュメントに基づいています(出力am、引数なし)。これは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'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.