[关闭]
@Heath 2016-07-14T14:48:47.000000Z 字数 1075 阅读 1996

安卓期末大作业

安卓实验报告


获取应用使用信息

因为在Android API 21提供了系统级应用的接口,可以获取到最近某一特定时间段内的应用使用情况,在用户切换应用后只需要根据记录的进入应用时间和切换应用时间就可以统计出一个使用时间段。但是一个重要的问题是开发者无法知道什么时候用户切换了应用,系统不会发出这样的广播。为了实现应用切换的监控,我们提出这样一个解决方案:即在Service中再开出一个线程,这个线程有每秒钟执行一次,每次执行时查看最近两秒钟内使用过的应用,并找出最近使用时间最大的那一个,与上一次记录的数据进行比较,若二者一致则说明应用未发生切换,如果二者不一致,则说明用户执行了切换操作,这是则把上次记录的数据更改为本次切换到的应用,并触发应用切换的处理方法。

锁屏时间过滤

上面的获取应用使用信息中存在着一个漏洞,即用户在某个应用界面直接锁屏,到开启屏幕解锁的这段时间也会配计入到应用使用时间内,而这显然是不合理的。为了过滤掉这段错误的时间,我们需要动态的注册屏幕关闭、开启、解锁三个广播监听器(涉及到Android系统电源管理,不允许静态注册)来监听屏幕变化。在用户关闭屏幕时,暂停应用切换监控线程,并记录在锁屏之前应用的使用时长信息。有两个比较麻烦的情况,一是用户的系统可能未设置锁屏,开启屏幕就直接进入到了应用,二是用户可能只是亮了一下屏幕,但是未解锁进入应用,在某些系统中,未设置锁屏时系统只发出开屏的广播,但在多数系统中会同时发出解锁和开屏的广播。为处理这些特殊情况,添加一个是否锁屏的数据结构。当(屏幕亮起且未设置锁屏时)或者(设置锁屏且解锁时)才认为用户真正进入到了系统,这时重新恢复应用切换监控进程,是否锁屏设置为false。当用户锁屏且屏幕是否锁屏为false时才认为用户是真正的从正常的应用界面关闭屏幕,而不是只亮了一下屏幕,未解锁进入系统,之后将是否锁屏设置为true。

应用定时

应用定时功能实现的是控制每天使用某个APP的时长。要实现控制时长就需要知道某个特定的APP在今天使用了多久,这部分信息是在获取应用那使用信息线程中记录下来的的,在该线程每秒运行时执行checkLimit函数,该函数的逻辑为:判断当前应用是否在监控列表且是否设置了定时,如果满足判断条件还要在判断今天是否已经提示过。提示过的话就不应该再弹窗告知用户,只有在没提示过的情况下,继续进行时间判断,从记录时间的数据结构中取出今天已经使用的总时间,加上从最后一次记录到当前运行时间作为迄今该APP当日使用总时间,与用户设定的限制作比较,决策是否进行提示。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注