获取最近使用的应用列表需要使用到UsageStatsManager类,还需要申请允许防御应用使用情况的权限。
private void getPackagesInfo() {
UsageStatsManager manager = (UsageStatsManager) getApplicationContext().getSystemService(USAGE_STATS_SERVICE);
List<UsageStats> stats = manager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, PhoneUtils.getTimesMorning().getTime(), PhoneUtils.getTimesNight().getTime());
PackageManager pm = getPackageManager();
for (UsageStats us : stats) {
ApplicationInfo applicationInfo = null;
try {
applicationInfo = pm.getApplicationInfo(us.getPackageName(), PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (applicationInfo != null) {
if ((applicationInfo.flags & applicationInfo.FLAG_SYSTEM) <= 0) {
"应用时长" = (int) (us.getTotalTimeInForeground() / 1000);
"应用名称" = applicationInfo.loadLabel(getPackageManager()).toString();
}
}
}
}
public class PhoneUtils {
//获得当天0点时间
public static Date getTimesMorning() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return (cal.getTime());
}
//获得当天24点时间
public static Date getTimesNight() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 24);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
//获得当天24点时间戳
public static long getTimesNow() {
return System.currentTimeMillis();
}
}
以上就完成了获取最近使用的应用时长的功能。
该代码段展示了如何使用UsageStatsManager类获取设备上最近一天内使用过的应用列表及其时长。通过申请权限并调用queryUsageStats方法,结合PhoneUtils工具类获取时间范围,可以获取应用的前台使用总时间,并展示应用名称和时长。


被折叠的 条评论
为什么被折叠?



