Köklü Cyanogen OS 12 ve Tasker v4.8 ile bir OnePlus One'ım var . PC'de çıkan bir Görev'in görevinin yürütülmesini gerektiren bir bash betiğim var. SSHDroid (veya adb shell) aracılığıyla bir görev yürütme sorusunu gördüm ve kabul edilen cevap Android'imde işe yaramasa da , çözüm çok basit. Bir görevi aramak için şunları yapın:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
Ancak, başarılı bir şekilde yapabileceğim bu. Çıkış sırasında, komut dosyasının sonucunu temel alarak cihazda işlemime devam edebilmem için komut dosyamın çıkış durumunu göreve geçirmesi gerekiyor.
Çağırma görevler için resmi rehber bana yardımcı olmadı bu yüzden, programcılar içindir. Görev Başlığı Niyet ile Başlatma Göre Bir değişkenin değerini geçmek için çeşitli yollar denedim , ama boşuna.
Bir görevi başka bir görevden çağırdığımızda, bize iki değişken kullanarak değerleri iletme esnekliği verilir. Bu iki değişken çağrı adı ile %par1
ve ismi kullanılarak alınabilir %par2
. Demo görevimde tek yaptığım Uyarı → Flash → Metin → Show me: %arg1 %par1
.
# Sadece gösterim amacıyla "lol" adında bir görev oluşturdum adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" "par1" --es "varValues" "alındı" adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" "% par1" --es "varValues" "alındı" adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" "Par1" --es "varValues" "alındı" # görevde par1 ile Par1 arasında değişken adı adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" "% Par1" --es "varValues" "alındı"
Tüm bu komutlar bu çıktıyla yürütülür
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Bu yayın eserlerini bile gönderiyor
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
Ancak görevi doğrudan çağırıp değişken değerini göndermek hiçbir şey yapmaz.
Peki, yaklaşımımdaki hata nerede ve / veya sadece komut satırı kullanarak bir görevdeki değişken bir değere nasıl gönderip alabilirim ?
Not Bir çözüm aramıyorum söyledi. Cihazımdaki komut dosyasından çıkış durumunu almak için birçok geçici çözüm bulabildim, ancak niyet kullanmak bunların en basit çözümü gibi görünüyor ve bu tekniği de öğrenmek istiyorum.
Güncelleme
Sorgumu şurada büyüttüm:
- resmi forumlar - Tasker: Komut satırından bir görevi çağırır ve değişken (ler) i ve / veya verileri ona iletir
- subreddit Tasker: Komut satırından bir görev çağrıldığında değişkenler geçirilebilir mi?
- Tasker geliştiricisi Pent'e özel olarak e-posta kullanarak
Bu yanıtı hem e-posta hem de forum aracılığıyla Pent'ten aldım
-E ile adb çağrısına fazladan bir StringArrayList ekleyebilmeniz gerekir, adb'nin bunu yapıp yapamayacağını bilmiyorum.
Öyleyse, biçimi görmek için java'yı anlarsanız, addLocalVariable işlevi TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java bakabilirsiniz .
Ve bu soruyu gönderdikten sonra tam olarak bunu düşündüm .
Burada cevap başına, bir dize dizisi adb kullanılarak geçirilebileceğine inanıyorum. Bu yüzden bazı sorgular denedim ama yine çıkmaz sokakla karşılaştım.
adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{" "}' adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" '{"par1"}' --es "varValues" '{" "}' adb shell su -c am yayını -bir net.dinglisch.android.tasker.ACTION_TASK --es "görev_adı" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" alındı "\," tekrar "}'
Ayrıca, amacı kullanarak URI'ye dönüştürdüm ve am to-intent-uri
tekrar başarılı olamadan, doğrudan URI göndermeyi denedim.
Yeni güncelleme
Okumalar viz dayanarak . 1 , 2 ve 3 , kesinlikle bir dize dizisi argüman adb shell am
kullanılarak geçirilebileceğinden eminim --esa
. Misal:
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
Bununla birlikte, bu sorgu hala başarısız:
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"
Yeni güncelleme # 2
Bir test alanı olarak stok Android 6.0.1'i kullanabilirsiniz.