移动终端
2012 年 11 月 11 日
Tasker 非常见问题FAQ
本文介绍了Android软件Tasker的使用过程中可能遇到的一些问题和解决方案。其中包括如何获取子Task的返回值、调用Shell导致Tasker卡死的解决方法、以及使用TTS时可能出现的错误提示和解决方法等。此外,文章还提到了作者将不定期更新并欢迎读者分享使用Tasker的经验和Profile。
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会卡死?
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
- 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的结果就保存在这个文件中,读取这个文件就知道结果了。
本文为原创文章,未经允许请勿非法盗用资源。我们保护知识产权,尊重每一个创作者的劳动成果。如需转载,请务必注明出处并获得授权,谢谢合作!
作者:Lance | 发表日期:2012 年 11 月 11 日