移动终端
2012 年 10 月 27 日
Android Tasker应用之统计手机每天的使用时间
本篇文章介绍如何使用Android的Tasker软件做一个精确统计手机使用时间的应用,并通过Minimalistic Text在桌面上显示。通过Tasker软件的全局变量来记录今天的日期、总的手机使用时间、开始使用(屏幕点亮)的时间点,并在屏幕点亮时更新点亮时间和显示。文章提供了详细的操作步骤和推荐下载地址。该方法可以让用户精确统计自己使用手机的时间,从而更好地控制自己的使用习惯。
你是手机控吗?你每天花多少时间在手机上呢?后面这个问题可能比较难精确地回答,不过有了Tasker,我们就可以将答案精确到秒了。这篇文章将介绍如何使用Android的Tasker软件做一个精确统计手机使用时间的应用,并通过Minimalistic Text在桌面上显示。
先上一张粗略的效果图:
原理:手机的使用时间实际上就是亮屏的时间,将每次屏幕点亮到屏幕熄灭的时间间隔加起来,就是总的使用时间了。
开始之前请先安装好Tasker和Minimalistic Text两个软件,一个后台处理数据,一个前端显示。推荐下载地址:
- Tasker:http://www.coolapk.com/apk/2966/
- Minimalistic Text:http://www.coolapk.com/apk/3489/
添加全局变量
在Tasker里新建三个全局变量,并将初始值设为0。
%MPLAYDATE //今天的日期
%MPLAYTIME //总的手机使用时间
%MPLAYSTART //开始使用(屏幕点亮)的时间点
屏幕点亮时更新点亮时间和显示
如果你觉得过程比较复杂,请直接下载我配置好的Profile导入到Tasker中,点此下载 Count_play_time_1_.prf(下载后解压)。
在Tasker里新建一个Profile,名为
Count usage time(1)
(这里的1主要是应为我们还有另外一个屏幕熄灭的情景模式),确定 -> 添加Event
-> Display
-> Display on
,然后新建一个匿名Task,如下图:这里需要做的就是在屏幕点亮时将手机运行时间保存在开始时间
%MPLAYSTART
中,另外如果日期更新,还需要需要重新设置统计日期并将新的一天的使用时间设为0。这里的日期判断涉及到Tasker的IF流程控制,详细步骤:STEP 1 : 如果统计日期不是今天,那么就需要更新日期并重设使用时间.
Add(点击"+")
-> Task
-> IF
,条件为%MPLAYDATE (Not Match) %DATE
;Add
—> Variable
-> Variable Se
t,%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的使用时间字符串值,并将初始值为”-“,如下图:
接下来就是
%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
。3、屏幕熄灭时更新手机使用时间
配置文件下载:Count_play_time_2_.prf。
这里需要做的就是当屏幕熄灭时,将从点亮到熄灭这一段的时间片加到总的使用时间中。
在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)等,如果你觉得可能会出现其他问题导致错误的话欢迎留言交流。4、配置Minimalistic Text显示
在主屏上添加一个2*1的Minimalistic Text 插件,在Predefined layout里选
Cuscom...
,点击Custom layout
进入自定义布局设置。Add(点"+"图标)
-> Misc
-> Local Variable
,变量名输入%DPLAYTIME
,这样就能接收Tasker发送过来的使用时间值。你还可以添加一些其它的文字美化一下。到这里这个应用就全部完成了,亮屏再关屏几次看下效果吧。
更新日志
2012-11-10:
请下载过2012-11-10之前的配置文件的朋友重新下载,将之前的配置文件删除后重新导入。
- 修复了使用时间出现负数和”-“的问题,之前一个版本是因为没有将变量强制转换成整型;
- 更新了工作机制,上个版本的显示更新是在屏幕关闭时进行的,现在改为屏幕点亮时更新,屏幕关闭时将使用时间保存。
本文为原创文章,未经允许请勿非法盗用资源。我们保护知识产权,尊重每一个创作者的劳动成果。如需转载,请务必注明出处并获得授权,谢谢合作!
作者:Lance | 发表日期:2012 年 10 月 27 日