如何在任务中发送和接收变量值?


9

我有一个植根于Cyanogen OS 12和Tasker v4.8的OnePlus One 。我在PC中有一个bash脚本,退出时需要执行Tasker的任务。我已经看到了通过SSHDroid(或adb shell)运行Tasker任务的问题,尽管可接受的答案在我的Android上不起作用,但解决方案非常简单。要调用任务,请执行以下操作:

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

但是,这就是我能成功完成的全部工作。在退出期间,我的脚本需要将退出状态传递给任务,以便我可以根据脚本的结果在设备上继续进行处理。

调用任务官方指南是为程序员准备的,因此对我没有帮助。对于通过Intent进行的线程启动任务,我尝试了多种方法来传递变量的值,但无济于事。

当我们从另一个任务调用一个任务时,我们可以灵活地使用两个变量来传递值。被调用的任务可以使用名称%par1和接收这两个变量%par2。在我的演示任务中,我正在做的是Alert→Flash→Text→ Show me: %arg1 %par1

#仅供参考,我创建了一个名为“ lol”的任务

adb shell su -c正在广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ lol” -es“ varNames”“ par1” -es“ varValues”“已接收”
adb shell su -c正在广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ lol” -es“ varNames”“%par1” --es“ varValues”“已接收”
adb shell su -c广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ lol” -es“ varNames”“ Par1” -es“ varValues”“接收”#我也更改了任务中的变量名par1到Par1
adb shell su -c正在广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ 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

但是直接调用任务然后发送变量值不会执行任何操作。

那么,我的方法有什么问题,和/或仅使用命令行如何在任务中发送和接收变量值?

请注意,我不是在寻找解决方法。我完全有能力提出许多解决方法来从设备上的脚本接收退出状态,但是使用Intent似乎是它们中最直接的解决方案,我也想学习这种技术。

更新资料

我在以下位置提出了查询:

我通过电子邮件和论坛收到了Pent的回复

您将必须能够使用-e将额外的StringArrayList添加到adb调用中,不知道adb是否可以做到这一点。

如果是这样,要查看格式,可以查看TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java,如果您了解Java,可以使用addLocalVariable 函数。

这正是在发布此问题后后来推测的结果

根据这里的答案,我相信可以使用adb传递字符串数组。所以我尝试了一些查询,但是又遇到了死胡同。

adb shell su -c正在广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ lol” -es“ varNames”'{“ arg1”}'-es“ varValues”'{“时间“}'
adb shell su -c正在广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ lol” -es“ varNames”'{“ par1”}'-es“ varValues”'{“时间“}'
adb shell su -c广播-a net.dinglisch.android.tasker.ACTION_TASK --es“ task_name”“ lol” -es“ varNames”'{“ par1” \,“ arg1”}'-es“ varValues “'{” received“ \,” again“}'

我还使用将该意图转换为URI,am to-intent-uri并尝试直接发送该意图URI,但再次失败。

新更新

根据读数即。 123,我绝对相信,一个字符串数组可以通过传递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脚本必须将变量传递给Tasker中的正确任务?但是tasker中的任务没有接收该变量,您希望它接收该变量。我在正确的轨道上吗?
Matt07211 '16

这是一个bash脚本,但是的,最后我想使用adb调用任务并将变量发送给它。
Firelord

好的,如果我发现任何有用的信息,都将发布,祝您好运
Matt07211 '16

如果我听起来很愚蠢,请原谅我-因为您在Tasker中显然比我先进-但您不能简单地使脚本在退出之前将变量数据写入文本文件,然后让Tasker在特定条件下读取该文件并进行设置来自它的变量?
pure.by

Answers:


1

基于@firelord的发现和am的应用程序内文档(输出am,无arg)。这适用于运行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'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.