Android Tasker应用之统计手机每天的使用时间(转)
tasker吧
全部回复
仅看楼主
level 11
diehead_fy 楼主
1楼谢该文原作者 树叶
2012年11月14日 12点11分 1
level 11
diehead_fy 楼主

你是手机控吗?你每天花多少时间在手机上呢?后面这个问题可能比较难精确地回答,不过有了Tasker,我们就可以将答案精确到秒了。这篇文章将介绍如何使用Android的Tasker软件做一个精确统计手机使用时间的应用,并通过Minimalistic Text在桌面上显示。
先上一张粗略的效果图:
2012年11月14日 12点11分 2
level 11
diehead_fy 楼主
原理:手机的使用时间实际上就是亮屏的时间,将每次屏幕点亮到屏幕熄灭的时间间隔加起来,就是总的使用时间了。
开始之前请先安装好Tasker和Minimalistic Text两个软件,一个后台处理数据,一个前端显示,推荐下载地址:
Tasker:http://www.coolapk.com/apk/2966/
Minimalistic Text:http://www.coolapk.com/apk/3489/
2012年11月14日 12点11分 3
level 11
diehead_fy 楼主
1、添加全局变量
在Tasker里新建三个全局变量,并将初始值设为0。
%MPLAYDATE //今天的日期
%MPLAYTIME //总的手机使用时间
%MPLAYSTART //开始使用(屏幕点亮)的时间点
2012年11月14日 12点11分 4
level 11
diehead_fy 楼主
2、 屏幕点亮时更新点亮时间和显示
如果你觉得过程比较复杂,请直接下载我配置好的Profile导入到Tasker中,点此下载 Count_play_time_1_.prf(下载后解压)。
在Tasker里新建一个Profile,名为"Count usage time(1)"(这里的1主要是应为我们还有另外一个屏幕熄灭的情景模式),确定 -> 添加Event -> Display -> Display on,然后新建一个匿名Task,如下图:
2012年11月14日 12点11分 5
level 11
diehead_fy 楼主
这里需要做的就是在屏幕点亮时将手机运行时间保存在开始时间%MPLAYSTART中,另外如果日期更新,还需要需要重新设置统计日期并将新的一天的使用时间设为0。这里的日期判断涉及到Tasker的IF流程控制,详细步骤:
STEP 1 : 如果统计日期不是今天,那么就需要更新日期并重设使用时间。
Add(点击"+") -> Task -> IF,条件为%MPLAYDATE (Not Match) %DATE;
Add -> Variable -> Variable Set,%MPLAYDATE (To) %DATE;
Add -> Variable -> Variable Set,%MPLAYTIME (To) 0;
Add -> Task -> End If。
STEP 2: 保存屏幕点亮时间
Add -> Variable -> Variable Set,%MPLAYSTART (To) %UPS;
STEP 3: 发送到Minimalistic Text 显示
我们需要将总的使用时间变成时分秒的格式发送到Minilimalistic Text。新建一个本地变量%mplaytimestr用于保存发送到Minimalistic Text的使用时间字符串值,并将初始值为"-",如下图:
2012年11月14日 12点11分 6
level 11
diehead_fy 楼主
接下来就是%mplaytimestr的计算了,我们使用javascriptlet来处理。
Add -> Script -> Javascriptlet,将下面的代码输入:
var
playtime = global('MPLAYTIME');
var
playtimeH = Math.floor(playtime/3600);
var
playtimeM = Math.floor(playtime % 3600/60);
var
playtimeS = Math.floor(playtime % 60);
mplaytimestr = playtimeH +
":"
+ playtimeM +
":"
+ playtimeS;
最后一步就是将结果发送到Minimalistic Text的本地变量中,这里将这个变量设为%DPLAYTIME。
2012年11月14日 12点11分 7
level 11
diehead_fy 楼主
3、屏幕熄灭时更新手机使用时间
这里需要做的就是当屏幕熄灭时,将从点亮到熄灭这一段的时间片加到总的使用时间中。
在Tasker里新建一个Profile,名为"Count usage time(2)",确定 -> 添加Event -> Display -> Display off,然后新建一个匿名Task。
Add -> Script -> Javascriptlet (这里没有选择Javascript的原因是代码较少,不需要保存在SD卡中),添加下面的代码:
var mplaytimeend = parseInt(global('UPS'));
// do nothing if not today, the date will be reset on next screen on
if(global('DATE') == global('MPLAYDATE')) {
// MPLAYSTART is 0 only if manually set
if(global('MPLAYSTART') != 0 ) {
// when phone start, the old MPLAYSTART value may be larger
if(mplaytimeend > parseInt(global('MPLAYSTART')) ) {
var newplaytime = parseInt(global('MPLAYTIME')) + mplaytimeend - parseInt(global('MPLAYSTART'));
setGlobal('MPLAYTIME', newplaytime);
}
}
}
这里考虑到了一些可能导致错误的原因如日期错误、开始时间%MPLAYTIME为0(除非认为设置,否则这个Uptime值不可能为0)等,如果你觉得可能会出现其他问题导致错误的话欢迎到作者的博客留言交流。
2012年11月14日 12点11分 8
level 11
diehead_fy 楼主
4、配置Minimalistic Text显示
在主屏上添加一个2*1的Minimalistic Text 插件,在Predefined layout里选"Cuscom...",点击"Custom layout"进入自定义布局设置。
Add(点"+"图标) -> Misc -> Local Variable,变量名输入%DPLAYTIME,这样就能接收Tasker发送过来的使用时间值。你还可以添加一些其它的文字美化一下。
到这里这个应用就全部完成了,亮屏再关屏几次看下效果吧。
2012年11月14日 12点11分 9
请问楼主,假如我想用变量判断当前时间%TIME是几点怎么版,%time返回的时间是什么格式的呢?
2012年11月16日 08点11分
回复 wenniwenti :譬如当前时间是11:53,那么%TIME的返回值就是1153
2012年11月16日 10点11分
谢谢啊,原来是这样,哪里可以查到变量返回的格式或默认值,值的范围呢?比如那些“基站id”,“信号强度”那些?
2012年11月16日 13点11分
这样怎么不行啊,我加了一个 if %TIME~2215执行播放媒体,怎么到了22点15不执行呢
2012年11月16日 14点11分
level 3
very nice.
2012年11月14日 13点11分 10
level 1
lz
qq多少,有些问题请教
2012年11月20日 12点11分 11
level 1
是不是看关于中的电池耗电排行,找到屏幕那一行,也算吧?
2013年03月26日 08点03分 12
level 6
start refresh widget
这步是如何操作,不会啊,能再讲详细点吗?
2013年09月30日 09点09分 13
照着做了一次,没有显示结果,不知道问题在什么地方?
2013年09月30日 14点09分
level 6
照着做了一次,没有显示结果。不知道问题在什么地方?
2013年09月30日 14点09分 14
level 6
三星note2检查设置正确,确定无效果。
2013年10月02日 12点10分 15
level 6
主要是屏幕打开屏幕关闭的条件设置变量无效。
2013年10月02日 12点10分 16
level 6
都没有问题,原来都是试用版4.2.b8m惹的祸,4.2b8也不行。换回4.1u3破解版就正常了![哈哈]
2013年10月04日 02点10分 17
level 2
电池耗电排行,找到屏幕那一行,
屏幕使用时间≈手机使用时间
发现一条shell命令取得:
dumpsys batteryinfo|grep 'Screen on'
2014年05月12日 08点05分 18
赞同你的方法
2015年02月27日 04点02分
关机后,时间归零了
2015年03月01日 03点03分
level 12
水下经验,照搬楼主的,不过显示用的zoom
2015年03月21日 05点03分 19
1