最近应用使用情况获取

来源:互联网 发布:网络全职 编辑:程序博客网 时间: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
为什么无法设置免费下载呢,奇怪。

结语

个人笔记,文字渣,如果看到这篇文章,谢谢,见谅

原创粉丝点击