Làm thế nào để gửi một giá trị biến đến và nhận nó trong một nhiệm vụ?


9

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

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-urivà 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 , 23 , 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 amsử 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.


Tôi bắt đầu nghĩ rằng tôi cần phải vượt qua các chuỗi chuỗi và tôi không biết làm thế nào để tiến hành điều đó.
Firelord

Không chắc chắn nếu đọc đúng, bạn có một tập lệnh adb, khi hoàn thành, có phải chuyển một biến sang một tác vụ trong tác vụ chính xác không? Nhưng tác vụ trong tasker không nhận được biến này và bạn muốn nó nhận biến. Tôi có đang đi đúng hướng không?
Matt07211

Nó là một tập lệnh bash, nhưng vâng, cuối cùng tôi muốn gọi một tác vụ bằng cách sử dụng adb và gửi một biến cho nó.
Firelord

Được rồi, sẽ đăng bất kỳ thông tin hữu ích nào nếu tôi tìm thấy, và chúc may mắn
Matt07211

Xin thứ lỗi cho tôi nếu tôi nghe có vẻ ngu ngốc - bởi vì bạn rõ ràng là người có trình độ cao hơn so với tôi - nhưng bạn không thể đơn giản làm cho tập lệnh của mình ghi dữ liệu biến vào tệp văn bản trước khi thoát và sau đó để Tác nhân đọc tệp đó theo các điều kiện nhất định và đặt các biến từ nó?
thuần khiết.by

Câu trả lời:


1

Dựa trên những phát hiện của @ Firelord và amtài liệu trong ứng dụng (đầu ra của am, không có đối số). Điều này hoạt động trên điện thoại của tôi chạy 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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.