Değişken değeri bir göreve nasıl gönderilir ve bir görevde nasıl alınır?


9

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 %par1ve 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:

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-uritekrar 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 amkullanı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.


Dize dizilerini geçirmem gerektiğini düşünmeye başladım ve buna nasıl devam edeceğimi bilmiyorum.
Firelord

Bu hakkı okuyorsanız, bir adb komut dosyanız var, bittiğinde, tasker'daki bir göreve doğru bir değişken iletmek zorunda değil misiniz? Ancak tasker'daki görev bu değişkeni geri almıyor ve değişkeni almasını istiyorsunuz. Doğru yolda mıyım?
Matt07211

Bu bir bash betiği, ama evet, sonunda adb kullanarak bir görev çağırmak ve ona bir değişken göndermek istiyorum.
Firelord

Tamam, bulursam faydalı bilgiler
gönderirim

Aptal gibi geliyorsam lütfen affedersiniz - çünkü Tasker'da benden daha gelişmişsinizdir - ancak komut dosyanızın çıkıştan önce değişken verileri bir metin dosyasına yazmasını ve ardından Tasker'ın belirli koşullar altında bu dosyayı okumasına ve ayarlamasına izin veremezdiniz değişkenler?
pure.by

Yanıtlar:


1

@ Firelord'un bulgularına ve amuygulama içi dokümanına dayanarak (çıktısı var am, arg yok). Bu 6.0.1 çalıştıran telefonumda çalıştı:

$ 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'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.