移动终端 2012 年 10 月 27 日

Android Tasker应用之统计手机每天的使用时间

本篇文章介绍如何使用Android的Tasker软件做一个精确统计手机使用时间的应用,并通过Minimalistic Text在桌面上显示。通过Tasker软件的全局变量来记录今天的日期、总的手机使用时间、开始使用(屏幕点亮)的时间点,并在屏幕点亮时更新点亮时间和显示。文章提供了详细的操作步骤和推荐下载地址。该方法可以让用户精确统计自己使用手机的时间,从而更好地控制自己的使用习惯。
你是手机控吗?你每天花多少时间在手机上呢?后面这个问题可能比较难精确地回答,不过有了Tasker,我们就可以将答案精确到秒了。这篇文章将介绍如何使用Android的Tasker软件做一个精确统计手机使用时间的应用,并通过Minimalistic Text在桌面上显示。
先上一张粗略的效果图:
phone usage time

原理:手机的使用时间实际上就是亮屏的时间,将每次屏幕点亮到屏幕熄灭的时间间隔加起来,就是总的使用时间了。

开始之前请先安装好Tasker和Minimalistic Text两个软件,一个后台处理数据,一个前端显示。推荐下载地址:

添加全局变量

在Tasker里新建三个全局变量,并将初始值设为0。
%MPLAYDATE    //今天的日期  
  
%MPLAYTIME    //总的手机使用时间  
  
%MPLAYSTART  //开始使用(屏幕点亮)的时间点  
global variables

屏幕点亮时更新点亮时间和显示

如果你觉得过程比较复杂,请直接下载我配置好的Profile导入到Tasker中,点此下载 Count_play_time_1_.prf(下载后解压)。
在Tasker里新建一个Profile,名为Count usage time(1)(这里的1主要是应为我们还有另外一个屏幕熄灭的情景模式),确定 -> 添加Event -> Display -> Display on,然后新建一个匿名Task,如下图:
add task
这里需要做的就是在屏幕点亮时将手机运行时间保存在开始时间%MPLAYSTART中,另外如果日期更新,还需要需要重新设置统计日期并将新的一天的使用时间设为0。这里的日期判断涉及到Tasker的IF流程控制,详细步骤:

STEP 1 : 如果统计日期不是今天,那么就需要更新日期并重设使用时间.

Add(点击"+") -> Task -> IF,条件为%MPLAYDATE  (Not Match) %DATE;
[caption id=“attachment_762” align=“alignnone” width=“383”]check date check date[/caption]
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;
screen on task

STEP 3: 发送到Minimalistic Text 显示

我们需要将总的使用时间变成时分秒的格式发送到Minilimalistic Text。新建一个本地变量%mplaytimestr用于保存发送到Minimalistic Text的使用时间字符串值,并将初始值为”-“,如下图:
playtime string
接下来就是%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
push playtime

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发送过来的使用时间值。你还可以添加一些其它的文字美化一下。
minimalistic-text-config
到这里这个应用就全部完成了,亮屏再关屏几次看下效果吧。

更新日志

2012-11-10: 请下载过2012-11-10之前的配置文件的朋友重新下载,将之前的配置文件删除后重新导入。
  • 修复了使用时间出现负数和”-“的问题,之前一个版本是因为没有将变量强制转换成整型;
  • 更新了工作机制,上个版本的显示更新是在屏幕关闭时进行的,现在改为屏幕点亮时更新,屏幕关闭时将使用时间保存。