1.配置权限
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
2.代码逻辑
public void getUseTime(){
UsageStatsManager usm = (UsageStatsManager)getSystemService(Context.USAGE_STATS_SERVICE);
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.DAY_OF_WEEK, -2);//最近两周启动过所用app的List
long startTime = calendar.getTimeInMillis();
/**
*
* queryUsageStats第一个参数是根据后面的参数获取合适数据的来源,有按天,按星期,按月,按年等。
* UsageStatsManager.INTERVAL_BEST
* UsageStatsManager.INTERVAL_DAILY 按天
* UsageStatsManager.INTERVAL_WEEKLY 按星期
* UsageStatsManager.INTERVAL_MONTHLY 按月
* UsageStatsManager.INTERVAL_YEARLY 按年
*/
List<UsageStats> list = usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,startTime,endTime);
//需要注意的是5.1以上,如果不打开此设置,queryUsageStats获取到的是size为0的list;
if(list.size()==0)
{
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
try {
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
} catch (Exception e) {
Toast.makeText(this,"无法开启允许查看使用情况的应用界面",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}else{
for(UsageStats usageStats :list){
Log.e("TAG",usageStats.getPackageName());//获取包名
Log.e("TAG",usageStats.getFirstTimeStamp()+"");//获取第一次运行的时间
Log.e("TAG",usageStats.getLastTimeStamp()+"");//获取最后一次运行的时间
Log.e("TAG",usageStats.getTotalTimeInForeground()/1000+"");//获取总共运行的时间 单位毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(usageStats.getFirstTimeStamp());// 格式化时间
Log.e("TAG",format);
SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
String timeLong = time.format(usageStats.getTotalTimeInForeground()- TimeZone.getDefault().getRawOffset());// 格式化使用时长
Log.e("TAG",timeLong);
try{
Field field = usageStats.getClass().getDeclaredField("mLaunchCount");
Log.e("TAG",field.get(usageStats).toString());//获取应用启动次数
}catch (Exception e)
{
e.printStackTrace();;
}
}
(232条消息) UsageStatsManager怎样使用问题详解和获取应用使用信息_安卓鸟的博客-CSDN博客