У меня OnePlus One с рутированной Cyanogen OS 12 и Tasker v4.8 . У меня есть скрипт bash на ПК, который при выходе требует выполнения задачи Tasker. Я видел вопрос « Запуск задачи Tasker через SSHDroid» (или оболочку adb), и хотя принятый ответ не работал на моем Android, решение очень простое. Чтобы вызвать задачу, выполните:
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"
Однако это все, что я могу успешно сделать. Во время выхода мой сценарий должен передать статус завершения задаче, чтобы я мог продолжить свою обработку на устройстве на основе результата сценария.
Официальное руководство для ссылающихся задач предназначено для программистов, так что не помогла мне. В соответствии с потоком Задача запуска через намерение Я пытался разными способами передать значение переменной, но безрезультатно.
Когда мы вызываем задачу из другой задачи, нам предоставляется возможность передавать значения с использованием двух переменных. Эти две переменные могут быть получены вызванной задачей, используя имя %par1
и %par2
. В моей демонстрационной задаче все, что я делаю, это Alert → Flash → Text → Show me: %arg1 %par1
.
# Только для демонстрации, я создал задачу с именем "LOL" Оболочка adb su -c am широковещательная рассылка -a net.dinglisch.android.tasker.ACTION_TASK --es "имя_задачи" "lol" --es "varNames" "par1" --es "varValues" "полученный" оболочка adb su -c am широковещательная рассылка -a net.dinglisch.android.tasker.ACTION_TASK --es "имя_задачи" "lol" --es "varNames" "% par1" --es "varValues" "полученный" Оболочка adb su -c am широковещательная рассылка -a net.dinglisch.android.tasker.ACTION_TASK --es "имя_задачи" "lol" --es "varNames" "Par1" --es "varValues" "получено" # Я также изменил имя переменной от par1 до Par1 в задаче Оболочка adb su -c am широковещательная рассылка -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
Но непосредственный вызов задачи и последующая отправка значения переменной ничего не делают.
Итак, в чем заключается ошибка в моем подходе и / или как я могу отправить и получить значение переменной в задаче, используя только командную строку ?
Обратите внимание, что я не ищу обходной путь. Я вполне могу придумать множество обходных путей для получения статуса выхода из моего скрипта на устройстве, но использование намерения представляется наиболее простым из них, и я тоже хочу изучить эту технику.
Обновить
Я поднял свой запрос на:
- Официальные форумы - Tasker: вызов задачи из командной строки и передача ей (ей) переменных и / или данных
- subreddit Tasker: можно ли передавать переменные при вызове задачи из командной строки?
- лично Пенту, разработчику Tasker, используя электронную почту
Я получил этот ответ от Пента, как по электронной почте, так и на форуме.
Вы должны быть в состоянии добавить дополнительный StringArrayList к вызову adb с -e, не знаю, может ли adb сделать это.
Если это так, чтобы увидеть формат вы можете посмотреть TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java , функцию addLocalVariable, если вы понимаете Java.
И это именно то, что я позже догадался после публикации этого вопроса.
Согласно ответу здесь , я считаю, что массив строк может быть передан с помощью ADB. Поэтому я попытался несколько запросов, но снова зашел в тупик.
Оболочка adb su -c am широковещательная -a net.dinglisch.android.tasker.ACTION_TASK --es "имя_задачи" "lol" --es "varNames" '{"arg1"}' --es "varValues" '{"time «}» Оболочка adb su -c am широковещательная рассылка -a net.dinglisch.android.tasker.ACTION_TASK --es "имя_задачи" "lol" --es "varNames" '{"par1"}' --es "varValues" '{"time «}» Оболочка adb su -c am широковещательная рассылка -a net.dinglisch.android.tasker.ACTION_TASK --es "имя_задачи" "lol" --es "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 и
am
в приложении к документу (выводam
, без аргументов). Это работало на моем телефоне под управлением 6.0.1:источник