mUsageStatsManager= (UsageStatsManager).getSystemService(Context.USAGE_STATS_SERVICE);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
List queryUsageStats = getUsageStatistics(1);
PackageManager pm = getApplicationContext().getPackageManager();
for(inti =0; i < queryUsageStats.size(); i++) {
UsageStats usageStats = queryUsageStats.get(i);
Class c = usageStats.getClass();
try{
//mLaunchCount 我理解的它就是是app启动次数,这是被@hide修饰的成员变量。只能用反射得到它的值。但是有个现象是,启动次不
//准,从桌面点进去记数2,从后台进入记数1,时间间隔为一天,总的统计次数也不准确
Field field = c.getDeclaredField("mLaunchCount");
field.setAccessible(true);
Field field1 = c.getDeclaredField("mBeginTimeStamp");
field1.setAccessible(true);
Field field2 = c.getDeclaredField("mEndTimeStamp");
field2.setAccessible(true);
ApplicationInfo applicationInfo = pm.getApplicationInfo(usageStats.getPackageName(), PackageManager.GET_META_DATA);
String appName = pm.getApplicationLabel(applicationInfo).toString();
PackageInfo packageInfo = pm.getPackageInfo(usageStats.getPackageName(),0);
//应用首次装时间
longfirstInstallTime = packageInfo.firstInstallTime;
//格式化成年月日
String firstInstallTime1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", firstInstallTime);
//应用最后一次更新时间
long lastUpdateTime = packageInfo.lastUpdateTime;
String lastUpdateTime1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", lastUpdateTime);
Log.i("应用:"+usageStats.getPackageName(),"first install time : "+ firstInstallTime1 +" last update time :"+ lastUpdateTime1);
//这部分的时间,我没有搞太明白,请自行验证
long firstTimeStamp = usageStats.getFirstTimeStamp();
String firstTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", firstTimeStamp);
long LastTimeStamp = usageStats.getLastTimeStamp();
String LastTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", LastTimeStamp);
long LastTimeUsed = usageStats.getLastTimeUsed();
String LastTimeUsed1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", LastTimeUsed);
long mBeginTimeStamp = field1.getLong(usageStats);
String mBeginTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", mBeginTimeStamp);
long mEndTimeStamp = field2.getLong(usageStats);
String mEndTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", mEndTimeStamp);
//这部分的时间,我没有搞太明白,请自行验证
Log.i("使用列表...field...","应用名:"+ appName +"\n包名:"+ usageStats.getPackageName() +"\nfirstTimeStamp:"+ firstTimeStamp1
+"\nLastTimeStamp:"+ LastTimeStamp1 +"\nLastTimeUsed:"+ LastTimeUsed1
+",\n启动次数:"+ field.getInt(usageStats)
+",\nmBeginTimeStamp:"+mBeginTimeStamp1+",\nmEndTimeStamp:"+mEndTimeStamp1);
}catch(Exception e) {
e.printStackTrace();
}
}