您的位置:首页 > 移动开发 > Android开发

android5.0用UsageStatsManager来获取程序运行时间

2016-06-20 21:40 465 查看
android5.0用UsageStatsManager来获取程序运行时间

本来想用PkgUsageStats来获取的,后来看到有人说5.0以后可以直接用UsageStatsManager来获取信息,而不用之前麻烦的反射了,所以试着用了一下。

不多说了,直接贴主要代码

Calendar beginCal = Calendar.getInstance();
beginCal.add(Calendar.HOUR_OF_DAY, -1);
Calendar endCal = Calendar.getInstance();
UsageStatsManager manager=(UsageStatsManager)getApplicationContext().getSystemService(USAGE_STATS_SERVICE);
List<UsageStats> stats=manager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,beginCal.getTimeInMillis(),endCal.getTimeInMillis());
这里直接调用了USageStatsManager的queryUsageStas()的方法,里面3个参数,分别是:

为int的字段,时间的统计的单位,即小时,天,月,年这类的
开始的时间
结束的时间
然后我们就能得到UsageStats的list,UsageStats可以提供几个方法给我们,可以得到运行的总时长,最后运行的时间,应用的包名。

StringBuilder sb=new StringBuilder();
for(UsageStats us:stats){
try {
<span style="white-space:pre">	</span>PackageManager pm=getApplicationContext().getPackageManager();
ApplicationInfo applicationInfo=pm.getApplicationInfo(us.getPackageName(),PackageManager.GET_META_DATA);
if((applicationInfo.flags&applicationInfo.FLAG_SYSTEM)<=0){
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
String t=format.format(new Date(us.getLastTimeUsed()));
sb.append(pm.getApplicationLabel(applicationInfo)+"\t"+t+"\t"+getTimeFromInt(us.getTotalTimeInForeground())+"\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}


这里还用到的就是PackageManager,这里能用这个类能通过包名来得到应用的信息,我这里只是简单的获得应用的名称,没有获得其他的信息。

然后在AndroidManifest.xml里加上一句

<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions"/>
就可以运行了。

但是运行时会发现并没有应用,因为我们需要打开对应的权限。可以在代码里加一句

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
跳转到对应的权限设置界面,将我们的运用打开就行了。

下面就是完成图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: