Tasker 非常见问题FAQ
本文将不定期更新,如果你有好的Profile或者使用Tasker的经历愿意分享给大家的话,欢迎留言或投稿给本站。
1、如何获取Perform Task
的返回值?
如果要获取子Task(被调用的Task)的返回值,必须确保父Task(调用的Task)优先级比子Task的优先级低(根据我的使用经验需要将子Task的优先级设为10才可以)。
由于Tasker在同一时间只允许一个Task运行,当父Task调用子Task时,高优先级的子Task将中断父Task,在子Task运行结束后父Task获得返回值并继续运行。
2、为什么调用Shell后Tasker会卡死?
测试发现Tasker对Shell的支持并不是很好。如果在后台调用shell(即通过事件调用或在javascript里调用),将导致shell执行不返回结果,此时Tasker将一直等待(即使设置了Shell超时也没用)。由于任务默认优先级相等,而Tasker只能同时运行一个任务,后面等待运行的任务将任务队列填满,此时新的任务不会执行,也不能进队列等待,Tasker将弹出警告信息。
卡死后的解决办法就是重启Tasker,先禁用再启用即可。
建议尽量不要使用Shell,如果一定要,则必须在前台调用,比如通过点击一个按钮来调用。
2013-02-15更新:Tasker调用Shell会卡死的原因是因为Shell没有退出,在执行Shell后加一条exit命令退出即可,不会卡死。
3、使用TTS时,为什么提示unsupported locale “TTS name”?
Tasker每次调用TTS之前,会查询一遍当前的所有进程名,看是否有这个TTS进程存在,如果没有就提示不支持,有就可以成功调用。
很多时候都会出现这样的错误提示,可能是Tasker没有查询到TTS进程导致的。
我的解决方法就是每次调用TTS后获取执行结果,如果执行结果为false就表示TTS调用失败,那么可以等待一段时间,然后再执行一次并获取结果…如此一般提示出错一两次之后就可以成功了,建议重试次数为3.
示例代码:
1 | var result = say(....); |
根据Grant的建议修改如下:
1 | var result = false; |
4、如何判断参数是否声明?
Tasker有个判断参数是否声明的条件isset。
不要试图在javascript里使用类似if(typeof mypar == 'undefined')
这样的方法来判断,Tasker不会提示错误,但每次执行到这些语句的时候会自动退出。
5、执行Javascript时,数组已经声明,为什么提示没有声明?
Tasker里面的javascript数组必须在函数外面声明,在函数内部声明会出错。
6、为什么获取不到%CELLID
的值或其它变量的值?
在Tasker里面获取%CELLID
的值为变量名%CELLID
,而不是具体的值。
Tasker或根据用户声明的变量来自动决定要不要更新这个变量的值。如果在Profile
中没有提到%CELLID
这个变量(即使在Task里面提到了),那么Tasker会认为这个变量没被使用,它并不会去更新这个变量的值,这也是Tasker的省电机制之一。
因此,如果要让Tasker自动更新某个变量的话,你需要在Profile
提及它(在javascript里提及是无效的),最简单的就是建个task,每次开机的时候讲这个值赋给一个变量,然后什么都不做就可以了。
7、如何判断Mobile Data是否已经连接?
Tasker暂时没有办法判断移动数据是否已经连接。
2013-04-13更新:提供一种通过Shell获取连接状态的方法: Android Tasker 判断手机流量是否打开
8、如何判断是否有活动的WIFI连接?
这里的活动连接是指WIFI已经连接上并且能进行数据收发。
Tasker有一个WIFI信息变量%WIFII
,它的值有下面几种情况:
%WIFII: WIFI没有打开
>>> SCAN <<< “可供连接的网络列表”: WIFI已经打开,附近有可供连接的热点,但是没有 活动连接。
>>> CONNECTTED <<< “IP, Mac参数等”: WIFI已经连接
在判断时,可以使用正则表达式判断%WIFII的值来判断WIFI的连接状态。
9、为什么条件为晃动的Profile
设置后无效?
Shake设置后必须调整参数,默认参数的似乎不能工作,建议设置:Sensitivity
- High
,Duration
- Medium
。
10、如果Profile
的State
条件不变,对应的Task会循环执行吗(即Tasker每轮询一次执行一次)?
不会,所有的Task在State
满足后执行一次,只要State
不变,就不会重复执行;只有当State状态不满足任务退出,下次再进入这个状态时才会再次执行。
比如有一个Profile
似乎手机面朝下静音,如果手机面一直朝下,那么即使你调成普通模式,下次轮询时也不会再次执行设置静音这个任务;只有在退出这个状态,比如手机朝上,然后再朝下就会再次执行。
11、怎么限制一个Profile
的执行频率?
长按Profile name
,在弹出菜单里设置CountDown Time
即可。
12、如何安全删除未使用的变量?
打开Variables
标签页,从底部往上拉,将显示Variable
过滤器,只选择Empty
就可以过滤出那些未使用的变量。
13、我新建了一个Scene
,为什么在Task
里找不到(修改Scenne
后为什么不即时生效)?
新建或更改Scene,必须保存后再次进入才能生效。
Task的更改也是一样的,必须保存后再次进入,它在Profile
里面的引用才会改变,调试的时候一定要注意这一点。
14、为什么我点Javascriptlet右上角的RUN
按钮提示OK,而运行javascript时却没有输出?
有些语法错误Tasker并不能检测出,比如错误判断一个变量是否存在方法 if(mypar)
(相信很多像我这样的C++用户都会这样用),即使在运行时Tasker也不会提示错误,而是直接退出!遇到这种情况可以使用断点调试的方法来检查。
15、为什么Tasker的Widget
文字背景是黑色的,而不是和其它图标一样是透明的?
因为它是Widget
而不是普通的快捷方式图标。
16、如何停止正在播放的TTS?
在启动个TTS前,使用Perform Task
启动一个停止TTS的任务。任务优先级为10(最高),任务弹出一个Scene
,Scene
里有一个按钮,点击执行Shut Up
命令。最后别忘了将Sene
Destory掉。
17、如何获取HTTP POST
的返回值。
当使用HTTP POST
提交数据时,%HTTPD
是空值。
POST方式网站返回的结果并不存在%HTTPD
变量中,而是写在文件中。在HTTP Post
动作中设置Output file
输出文件的路径,POST的结果就保存在这个文件中,读取这个文件就知道结果了。
Tasker 非常见问题FAQ