วิธีการส่งค่าตัวแปรให้และรับในงานได้อย่างไร


9

ฉัน OnePlus หนึ่งที่หยั่งราก Cyanogen OS 12 และทาซเคอ v4.8 ฉันทุบตีสคริปต์ในพีซีซึ่งเมื่อออกจากงานจะต้องมีการเรียกใช้ภารกิจของ Tasker ฉันเคยเห็นคำถามการเรียกใช้งาน tasker ผ่าน SSHDroid (หรือ adb shell)และถึงแม้ว่าคำตอบที่ได้รับการยอมรับจะไม่ทำงานบน Android ของฉันการแก้ปัญหาก็ง่ายมาก ในการเรียกภารกิจให้ทำ:

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

อย่างไรก็ตามนั่นคือทั้งหมดที่ฉันสามารถทำได้ ในระหว่างการออกสคริปต์ของฉันต้องผ่านสถานะการออกเพื่องานเพื่อให้ฉันสามารถดำเนินการประมวลผลบนอุปกรณ์ตามผลของสคริปต์

คู่มืออย่างเป็นทางการสำหรับงานที่กล่าวอ้างมีความหมายสำหรับการเขียนโปรแกรมเพื่อให้ไม่ได้ช่วยฉัน ตามหัวข้อLaunch Task ผ่านทาง Intentฉันพยายามหลายวิธีในการส่งผ่านค่าของตัวแปร แต่ไม่มีประโยชน์

เมื่อเราเรียกใช้งานจากงานอื่นเราได้รับความยืดหยุ่นในการส่งผ่านค่าโดยใช้ตัวแปรสองตัว ทั้งสองตัวแปรสามารถได้รับจากงานที่เรียกใช้ชื่อและ%par1 ในงานสาธิตของฉันทั้งหมดที่ฉันทำคือการแจ้งเตือน→แฟลช→ข้อความ→%par2Show me: %arg1 %par1

# สำหรับการสาธิตเท่านั้นฉันสร้างงานชื่อ "lol"

adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - เป็น "varNames" "par1" --es "varValues" "ได้รับ"
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - เป็น "varNames" "% par1" - ได้รับ "varValues" "ได้รับ"
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - "varNames" "Par1" - ได้รับ "varValues" "ได้รับ" # ฉันยังเปลี่ยน ชื่อตัวแปร par1 ถึง Par1 ในงาน
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - เป็น "varNames" "% Par1" - ได้รับ "varValues" "ได้รับ"  

คำสั่งเหล่านั้นทั้งหมดดำเนินการด้วยเอาต์พุตนี้

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

แต่การเรียกใช้งานโดยตรงแล้วส่งค่าตัวแปรไม่ได้ทำอะไรเลย

ดังนั้นความผิดพลาดในแนวทางของฉันและ / หรือฉันจะส่งและรับค่าตัวแปรในงานโดยใช้บรรทัดคำสั่งได้อย่างไร

โปรดทราบว่าฉันไม่ได้มองหาวิธีแก้ปัญหา ฉันสามารถหาวิธีแก้ปัญหาหลายอย่างเพื่อรับสถานะทางออกจากสคริปต์บนอุปกรณ์ได้อย่างสมบูรณ์แบบ แต่การใช้ความตั้งใจดูเหมือนจะเป็นวิธีที่ตรงไปตรงมาที่สุดสำหรับพวกเขาและฉันต้องการเรียนรู้เทคนิคนี้ด้วย

ปรับปรุง

ฉันยกคำถามของฉันที่:

ฉันได้รับการตอบกลับจาก Pent ทั้งทางอีเมลและในฟอรัม

คุณจะต้องสามารถเพิ่ม StringArrayList พิเศษในการเรียก adb ด้วย -e ไม่ทราบว่า adb สามารถทำได้หรือไม่

ถ้าเป็นเช่นนั้นหากต้องการดูรูปแบบที่คุณสามารถดูได้ที่ TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.javaฟังก์ชัน addLocalVariable ถ้าคุณเข้าใจ java

และนั่นคือสิ่งที่ฉันคาดการณ์ในภายหลังหลังจากโพสต์คำถามนี้

ตามคำตอบที่นี่ฉันเชื่อว่าอาร์เรย์สตริงสามารถส่งผ่านโดยใช้ adb ดังนั้นฉันจึงพยายามค้นหา แต่ก็พบจุดจบอีกครั้ง

adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - เป็น "varNames" '{"arg1"}' - เป็น "varValues" '{"เวลา "}'
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - เป็น "varNames" '{"par1"}' - เป็น "varValues" '{"เวลา "}'
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK - เป็น "task_name" "lol" - เป็น "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" ได้รับ "\," อีกครั้ง "}'

ฉันได้แปลงเจตนาเป็น URI โดยใช้am to-intent-uriและลองส่ง URI เจตนาโดยตรงโดยไม่ประสบความสำเร็จอีกครั้ง

อัพเดทใหม่

ขึ้นอยู่กับการอ่านได้แก่ 1 , 2และ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 เมื่อเสร็จแล้วต้องส่งตัวแปรไปยังงานใน tasker ที่ถูกต้องหรือไม่? แต่งานใน tasker ไม่ได้รับตัวแปรนี้อีกและคุณต้องการให้มันรับตัวแปร ฉันกำลังติดตามถูกต้องหรือไม่
Matt07211

มันเป็นสคริปต์ทุบตี แต่ใช่ในตอนท้ายฉันต้องการเรียกงานโดยใช้ adb และส่งตัวแปรไป
Firelord

โอเคจะโพสต์ข้อมูลที่เป็นประโยชน์หากฉันพบใด ๆ และโชคดี
Matt07211

โปรดขอโทษด้วยถ้าฉันฟังดูงี่เง่า - เพราะคุณเห็นได้ชัดเจนกว่าใน Tasker มากกว่าฉัน - แต่คุณไม่สามารถทำให้สคริปต์ของคุณเขียนข้อมูลตัวแปรไปยังไฟล์ข้อความก่อนออกจากนั้นปล่อยให้ Tasker อ่านไฟล์ตามเงื่อนไขและชุดที่กำหนด ตัวแปรจากมันคืออะไร?
pure.by

คำตอบ:


1

จากผลการวิจัย @ จ้าวและ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.