我有一个植根于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似乎是它们中最直接的解决方案,我也想学习这种技术。
更新资料
我在以下位置提出了查询:
- 官方论坛-Tasker:从命令行调用任务并将变量和/或数据传递给该任务
- subreddit Tasker:从命令行调用任务时可以传递变量吗?
- 使用电子邮件私下给Tasker的开发人员Pent
我通过电子邮件和论坛收到了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,但再次失败。
新更新
根据读数即。 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作为测试平台。