Tôi là OnePlus One với Cyanogen OS 12 và Tasker v4.8 đã được root . Tôi có một tập lệnh bash trong PC mà khi thoát yêu cầu phải thực thi tác vụ của Tác vụ. Tôi đã thấy câu hỏi Chạy một tác vụ tác vụ thông qua SSHDroid (hoặc vỏ adb) và mặc dù câu trả lời được chấp nhận không hoạt động trên Android của tôi, giải pháp rất đơn giản. Để gọi một nhiệm vụ, hãy làm:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
Tuy nhiên, đó là tất cả những gì tôi có thể làm thành công. Trong khi thoát, tập lệnh của tôi cần chuyển trạng thái thoát sang tác vụ để tôi có thể tiếp tục xử lý trên thiết bị dựa trên kết quả của tập lệnh.
Các hướng dẫn chính thức cho các nhiệm vụ gọi là có nghĩa là cho các lập trình viên, do đó không giúp tôi. Theo chủ đề Nhiệm vụ khởi chạy thông qua ý định Tôi đã thử nhiều cách khác nhau để vượt qua giá trị của một biến, nhưng không có kết quả.
Khi chúng tôi gọi một tác vụ từ một tác vụ khác, chúng tôi có thể linh hoạt chuyển các giá trị bằng hai biến. Hai biến đó có thể được nhận bởi tác vụ được gọi bằng tên %par1
và %par2
. Trong tác vụ demo của tôi, tất cả những gì tôi đang làm là Thông báo → Flash → Văn bản → Show me: %arg1 %par1
.
# Chỉ để trình diễn, tôi đã tạo một tác vụ có tên là "lol" adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "par1" --es "varValues" "đã nhận" adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% par1" --es "varValues" "đã nhận" adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "Par1" --es "varValues" "đã nhận" # Tôi cũng đã thay đổi tên biến par1 thành Par1 trong nhiệm vụ adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" "% Par1" --es "varValues" "đã nhận"
Tất cả những lệnh đã nói thực thi với đầu ra này
Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0
Ngay cả việc gửi tác phẩm phát sóng này
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
Nhưng gọi nhiệm vụ trực tiếp và sau đó gửi giá trị biến không làm gì cả.
Vì vậy, lỗi ở đâu trong cách tiếp cận của tôi và / hoặc làm thế nào để tôi gửi và nhận trong một giá trị biến trong một tác vụ chỉ sử dụng dòng lệnh ?
Lưu ý rằng tôi không tìm cách giải quyết. Tôi hoàn toàn có thể đưa ra nhiều cách giải quyết để nhận trạng thái thoát khỏi tập lệnh của mình trên thiết bị, nhưng sử dụng ý định dường như là giải pháp đơn giản nhất trong số họ và tôi cũng muốn học kỹ thuật này.
Cập nhật
Tôi đưa ra truy vấn của mình tại:
- diễn đàn chính thức - Tác vụ: Gọi một tác vụ từ dòng lệnh và truyền (các) biến và / hoặc dữ liệu cho nó
- subreddit Tác vụ: Các biến có thể được thông qua khi một tác vụ được gọi từ một dòng lệnh?
- riêng tư cho Pent, nhà phát triển của Tasker, sử dụng email
Tôi đã nhận được trả lời này từ Pent, cả qua email và trên diễn đàn
Bạn sẽ phải có thể thêm StringArrayList vào cuộc gọi adb với -e, không biết liệu adb có thể làm điều đó không.
Nếu vậy, để xem định dạng, bạn có thể xem TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , hàm addLocalVariable, nếu bạn hiểu java.
Và đó chính xác là những gì tôi đã phỏng đoán sau khi đăng câu hỏi này.
Theo câu trả lời ở đây , tôi tin rằng một chuỗi chuỗi có thể được thông qua bằng cách sử dụng adb. Vì vậy, tôi đã cố gắng một số truy vấn nhưng một lần nữa gặp một ngõ cụt.
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"time "} ' adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"time "} ' adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" đã nhận "\," lần nữa "}'
Tôi cũng đã chuyển đổi ý định sang URI bằng cách sử dụng am to-intent-uri
và thử gửi trực tiếp URI ý định, nhưng không thành công nữa.
Cập nhật mới
Dựa trên bài đọc viz. 1 , 2 và 3 , tôi hoàn toàn chắc chắn rằng một mảng chuỗi có thể được chuyển qua adb shell am
sử dụng --esa
đối số. Thí dụ:
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
Điều đó nói rằng, truy vấn này vẫn thất bại:
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"
Cập nhật mới # 2
Bạn có thể sử dụng stock Android 6.0.1 làm nơi thử nghiệm.