Как отправить значение переменной и получить его в задании?

9

У меня 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

Но непосредственный вызов задачи и последующая отправка значения переменной ничего не делают.

Итак, в чем заключается ошибка в моем подходе и / или как я могу отправить и получить значение переменной в задаче, используя только командную строку ?

Обратите внимание, что я не ищу обходной путь. Я вполне могу придумать множество обходных путей для получения статуса выхода из моего скрипта на устройстве, но использование намерения представляется наиболее простым из них, и я тоже хочу изучить эту технику.

Обновить

Я поднял свой запрос на:

Я получил этот ответ от Пента, как по электронной почте, так и на форуме.

Вы должны быть в состоянии добавить дополнительный 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 в качестве испытательного полигона.

Повелитель огня
источник
Я начинаю думать, что мне нужно передать строковые массивы, и я не знаю, как это сделать.
Повелитель огня
Не уверен, что если вы читаете это правильно, у вас есть сценарий adb, по окончании которого вы должны передать переменную в задачу Tasker правильно? Но задача в Tasker не получает эту переменную, и вы хотите, чтобы она получила переменную. Я на правильном пути?
Matt07211
Это bash-скрипт, но в конце я хочу вызвать задачу с помощью adb и отправить ей переменную.
Повелитель огня
Хорошо, опубликую любую полезную информацию, если я найду, и удачи
Matt07211
Прошу прощения, если я звучу глупо - потому что вы явно более продвинуты в 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'
Кеннет Хо
источник