Як надіслати значення змінної та отримати її у завданні?


9

У мене OnePlus One із вкоріненими Cyanogen OS 12 та Tasker v4.8 . У мене на комп’ютері скрипт bash, який при виході вимагає виконання завдання Tasker. Я бачив питання Запуск завдання задачі за допомогою SSHDroid (або оболонки adb), і хоча прийнята відповідь не працює на моєму Android, рішення дуже просте. Щоб викликати завдання, виконайте:

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

Однак це все, що я можу успішно зробити. Під час виходу мій сценарій повинен передати стан виходу до завдання, щоб я міг продовжувати обробку на пристрої на основі результату сценарію.

Офіційне керівництво для посилаються завдань призначений для програмістів, так що не допомогла мені. За завданням запуску потоку за допомогою наміру я намагався різними способами передавати значення змінної, але безрезультатно.

Коли ми викликаємо завдання з іншого завдання, нам надається можливість передавати значення за допомогою двох змінних. Ці дві змінні можуть бути отримані викликаним завданням, використовуючи ім'я %par1та %par2. У моєму демо-завданні все, що я роблю, - це сповіщення → спалах → текст → Show me: %arg1 %par1.

# Для демонстрації я створив завдання під назвою "lol"

adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "ім'я завдання" "lol" --es "varNames" "par1" --es "varValues" "отримано"
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "ім'я завдання" "lol" --es "varNames" "% par1" --es "varValues" "отримано"
adb shell su -c am Broadcast назва змінної par1 до Par1 у завданні
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "ім'я завдання" "lol" --es "varNames" "% Par1" --es "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 --es "ім'я завдання" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"час "}"
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "ім'я завдання" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"час "}"
adb shell su -c am Broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "ім'я завдання" "lol" --es "varNames" '{"par1" \, "arg1"}' --es "varValues "'{" отримано "\," знову "}"

Я також перетворив намір в URI за допомогою 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, коли закінчите, повинен передавати змінну завдання завданню правильно? Але завдання в завданні задачі - не отримання цієї змінної, і ви хочете, щоб вона отримала змінну. Я на правильному шляху?
Matt07211

Це сценарій bash, але так, наприкінці я хочу викликати завдання за допомогою adb і надсилати йому змінну.
Firelord

Гаразд,
напишу

Вибачте, будь ласка, якщо я звучав дурно - тому що ви, очевидно, просунутіші в Tasker, ніж я, - але ви не могли просто змусити ваш сценарій написати змінні дані до текстового файлу перед виходом, а потім дозволити Tasker прочитати цей файл за певних умов і встановити змінні з нього?
pure.by

Відповіді:


1

На основі висновків @ firelord та 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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.