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 %par1
dan %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:
- forum resmi - Tasker: Menjalankan tugas dari baris perintah dan meneruskan variabel dan / atau data ke sana
- subreddit Tasker: Bisakah variabel diteruskan ketika tugas dipanggil dari baris perintah?
- secara pribadi ke Pent, pengembang Tasker, menggunakan email
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-uri
dan 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 am
menggunakan --esa
argumen. 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.
sumber
Jawaban:
Berdasarkan temuan @ firelord dan
am
dokumen dalam aplikasi (output ofam
, no arg). Ini berfungsi pada ponsel saya yang menjalankan 6.0.1:sumber