Tasker 非常见问题FAQ

Tasker是一个传说中“只有想不到,没有做不到”的Android软件,当然,使用如此“神器”肯定也会遇到不少麻烦的。本文整理出了自己使用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.

示例代码:

var result = say(....);  
if(!result) { // retry 1  
    Wait(1500);  
    result = say(....);  
    if(!result) { // retry 2 //一般出错一次后重试一次就可以成功  
        Wait(1500);  
        result = say(....);  
        if(!result) { // retry 2  
            Wait(1500);  
            say(....); // 到这里再不成功就放弃了  
        }  
    }  
}  

根据Grant的建议修改如下:

var result = false;  
var count = 3;
while (count >=0) { 
    result = say(....);  
    if(result) {
        break;
    }
    Wait(1500);
    count--;
}

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- HighDuration- Medium

10、如果ProfileState条件不变,对应的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(最高),任务弹出一个SceneScene里有一个按钮,点击执行Shut Up命令。最后别忘了将Sene Destory掉。

17、如何获取HTTP POST的返回值。

当使用HTTP POST提交数据时,%HTTPD是空值。

POST方式网站返回的结果并不存在%HTTPD变量中,而是写在文件中。在HTTP Post动作中设置Output file输出文件的路径,POST的结果就保存在这个文件中,读取这个文件就知道结果了。

关键字:tasker, android

本文链接:树叶的BLOG >> Tasker 非常见问题FAQ

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 Unported许可协议进行许可。

上一篇 : 禁止百度统计、Google Analysis统计自己的访问 下一篇 : PacketiX 4.0 RC1 发布,完美支持Win8