Bagaimana cara mengirim nilai variabel ke dan menerimanya dalam suatu tugas?


9

Saya sudah OnePlus One dengan Cyanogen OS 12 dan Tasker v4.8 yang telah di-rooting . Saya memiliki skrip bash di PC yang saat keluar membutuhkan tugas Tasker untuk dieksekusi. Saya telah melihat pertanyaan Menjalankan tugas tasker melalui SSHDroid (atau adb shell) dan meskipun jawaban yang diterima tidak bekerja di Android saya, solusinya sangat sederhana. Untuk memanggil tugas, lakukan:

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"   

Namun, hanya itu yang bisa saya lakukan dengan sukses. Selama keluar, skrip saya harus meneruskan status keluar ke tugas agar saya dapat melanjutkan pemrosesan pada perangkat berdasarkan hasil skrip.

The panduan resmi untuk tugas-tugas menyerukan dimaksudkan untuk programmer, sehingga tidak membantu saya. Per utas Peluncuran Tugas melalui Intent Saya mencoba berbagai cara untuk meneruskan nilai variabel, tetapi tidak berhasil.

Saat kami menjalankan tugas dari tugas lain, kami diberikan fleksibilitas untuk meneruskan nilai menggunakan dua variabel. Kedua variabel tersebut dapat diterima oleh tugas yang dipanggil menggunakan nama %par1dan %par2. Dalam tugas demo saya, semua yang saya lakukan adalah Peringatan → Flash → Teks → Show me: %arg1 %par1.

# Untuk demonstrasi saja, saya membuat tugas bernama "lol"

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "par1" --es "varValues" "diterima"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% par1" --es "varValues" "diterima"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "Par1" --es "varValues" "diterima" # Saya juga mengubah nama variabel par1 ke Par1 dalam tugas
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% Par1" --es "varValues" "diterima"  

Semua perintah tersebut dijalankan dengan output ini

Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0

Bahkan mengirimkan siaran ini berfungsi

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

Tetapi memanggil tugas secara langsung dan kemudian mengirim nilai variabel tidak melakukan apa-apa.

Jadi, di mana kesalahan dalam pendekatan saya dan / atau bagaimana saya mengirim dan menerima dalam nilai variabel dalam tugas hanya menggunakan baris perintah ?

Perhatikan bahwa saya tidak mencari solusinya. Saya benar-benar dapat menemukan banyak solusi untuk menerima status keluar dari skrip saya di perangkat, tetapi menggunakan niat tampaknya menjadi solusi paling mudah dari mereka dan saya ingin belajar teknik ini juga.

Memperbarui

Saya mengajukan pertanyaan pada:

Saya menerima balasan ini dari Pent, baik melalui email maupun di forum

Anda harus dapat menambahkan ekstra StringArrayList ke panggilan adb dengan -e, tidak tahu apakah adb dapat melakukannya.

Jika demikian, untuk melihat formatnya Anda dapat melihat TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , fungsi addLocalVariable, jika Anda mengerti java.

Dan itulah yang saya duga kemudian setelah memposting pertanyaan ini.

Per jawaban di sini , saya percaya array string dapat diteruskan menggunakan adb. Jadi saya mencoba beberapa pertanyaan tetapi sekali lagi menemui jalan buntu.

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"waktu "} '
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"waktu "} '
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" diterima "\," lagi "}'

Saya juga mengonversi maksud menjadi URI menggunakan am to-intent-uridan mencoba mengirim maksud URI secara langsung, tanpa hasil lagi.

Pembaruan baru

Berdasarkan bacaan yaitu. 1 , 2 dan 3 , saya benar-benar yakin bahwa array string dapat dilewatkan adb shell ammenggunakan --esaargumen. Contoh:

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

Yang mengatakan, permintaan ini masih gagal:

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"

Pembaruan baru # 2

Anda dapat menggunakan stok Android 6.0.1 sebagai tempat pengujian.


Saya mulai berpikir bahwa saya perlu melewati array string dan saya tidak tahu bagaimana melanjutkannya.
Firelord

Tidak yakin jika membaca ini dengan benar, Anda memiliki skrip adb, ketika selesai, harus meneruskan variabel ke tugas di tasker, benar? Tetapi tugas di tasker tidak menerima variabel ini, dan Anda ingin itu menerima variabel. Apakah saya di jalur yang benar?
Matt07211

Ini adalah skrip bash, tapi ya, pada akhirnya saya ingin memanggil tugas menggunakan adb dan mengirim variabel ke sana.
Firelord

Oke, akan memposting info bermanfaat jika saya menemukan, dan semoga sukses
Matt07211

Maafkan saya jika saya terdengar bodoh - karena Anda jelas lebih maju di Tasker daripada saya - tetapi tidak bisakah Anda membuat skrip Anda menulis data variabel ke file teks sebelum keluar dan kemudian membiarkan Tasker membaca file itu pada kondisi tertentu dan mengatur variabel dari itu?
pure.by

Jawaban:


1

Berdasarkan temuan @ firelord dan amdokumen dalam aplikasi (output of am, no arg). Ini berfungsi pada ponsel saya yang menjalankan 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'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.