最近应用使用情况获取
来源:互联网 发布:网络全职 编辑:程序博客网 时间:2024/06/02 04:46
数据界面如下
应用场合
应用锁,应用使用情况分析
原理
基于UsageStatsManager 实现
UsageStatsManager mUsageStatsManager = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE); Map<String, UsageStats> mapList = mUsageStatsManager.queryAndAggregateUsageStats(beginTime, now);
核心函数
原始数据获取
private void getAggregateUsageStats() { final long USAGE_STATS_PERIOD = 1000 * 60 * 60 * 24 * 1; long now = System.currentTimeMillis(); long beginTime = now - USAGE_STATS_PERIOD; UsageStatsManager mUsageStatsManager = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE); Map<String, UsageStats> mapList = mUsageStatsManager.queryAndAggregateUsageStats(beginTime, now); if (mapList != null && !mapList.isEmpty()) { for (Map.Entry<String, UsageStats> entry : mapList.entrySet()) { try { if (mAppLabelMap != null && !mAppLabelMap.containsKey(entry.getValue().getPackageName())) { ApplicationInfo appInfo = mPm.getApplicationInfo(entry.getValue().getPackageName(), 0); String label = appInfo.loadLabel(mPm).toString(); mAppLabelMap.put(entry.getValue().getPackageName(), label); } } catch (PackageManager.NameNotFoundException e) { // This package may be gone. } SourceUsage sourceUsage = new SourceUsage(); sourceUsage.package_name = entry.getValue().getPackageName(); sourceUsage.total_time_foreground = entry.getValue().getTotalTimeInForeground(); sourceUsage.last_time_used = entry.getValue().getLastTimeUsed(); publishProgress(sourceUsage); } } }
比较器插入
public static class UsageTimeComparator implements Comparator<SourceUsage> { @Override public final int compare(SourceUsage a, SourceUsage b) { return (int) (b.total_time_foreground - a.total_time_foreground); } }
权限申请
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
常用工具栏
package com.sufadi.usagedemo.util;import android.app.usage.UsageStats;import android.app.usage.UsageStatsManager;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.provider.Settings;import java.util.List;/** * Created by Fadi.Su on 2017/10/25. */public class Utils { /** * 有权查看使用情况的应用程序 * * @param mContext * @return */ public static boolean isNoOption(Context mContext) { PackageManager packageManager = mContext.getApplicationContext().getPackageManager(); Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } /** * "有权查看使用情况的应用程序"选项是否被打开 * * @return */ public static boolean isNoSwitch(Context mContext) { long ts = System.currentTimeMillis(); UsageStatsManager usageStatsManager = (UsageStatsManager) mContext.getApplicationContext().getSystemService(Context.USAGE_STATS_SERVICE); List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats( UsageStatsManager.INTERVAL_BEST, 0, ts); if (queryUsageStats == null || queryUsageStats.isEmpty()) { return false; } return true; } /** * 跳转到设置界面 * @param mContext */ public static void startSettings(Context mContext) { Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); mContext.startActivity(intent); }}
具体DEMO
http://download.csdn.net/download/su749520/10039255
为什么无法设置免费下载呢,奇怪。
结语
个人笔记,文字渣,如果看到这篇文章,谢谢,见谅
阅读全文
0 0
- 最近应用使用情况获取
- android获取最近使用应用的信息
- C# 系统应用之获取Windows最近使用记录
- Android 5.0以上通过UsageStatsManager类 获取应用使用情况
- 获取磁盘使用情况
- 最近情况
- 最近情况
- Android 获取最近应用的缩略图
- Android 获取最近应用的缩略图
- android 5.0 获取最近运行的应用
- java获取硬盘使用情况
- 获取eCos堆栈使用情况
- 获取eCos堆栈使用情况 .
- 获取系统内存使用情况
- 获取ios内存使用情况
- 获取iOS内存使用情况
- 获取iOS内存使用情况
- PHP获取内存使用情况
- 【LeetCode算法练习(C++)】Remove Element
- 微信支付代码片段tp
- Deep Learning:正则化(十二)
- 解析Excel
- BZOJ 2815 [ZJOI2012]灾难 (支配树)拓扑+倍增
- 最近应用使用情况获取
- 关于Unity加载优化,你可能遇到这些问题
- NTSB发布53页最终报告:特斯拉自动驾驶事故「会发生在任何人身上」
- Linux Unit12--虚拟机的管理
- 离线安装CDH5.12.1
- Python完全新手教程
- 安卓开发框架(MVP+主流框架+基类+工具类)--- 工具类
- 图像分割·简介
- javascript的几种阻止冒泡详细描述