zoukankan      html  css  js  c++  java
  • UsageStatsUtil

    package com.android.demo.lileidemo.utils;

    import android.app.usage.UsageEvents;
    import android.app.usage.UsageStats;
    import android.app.usage.UsageStatsManager;
    import android.content.Context;

    import com.android.demo.lileidemo.constant.AppConstants;

    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.List;

    /**
    * date: 03/25/2020.
    * author: lilei.
    */
    public class UsageStatsUtil {
    private static final String TAG = AppConstants.APP_TAG + "UsageStatsUtil ";
    private static volatile UsageStatsUtil mInstance;
    private static final boolean DEBUG = false;
    private static List<UsageStats> mListUsageStats;
    private static UsageStats mUsageStats;

    /**
    * getUsageStatsList.
    *
    * @param context context.
    * @param beginTime beginTime.
    * @param endTime endTime.
    * @return Get UsageStats list.
    */
    public static synchronized List<UsageStats> getUsageStatsList(Context context, long beginTime,
    long endTime) {
    UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(
    Context.USAGE_STATS_SERVICE);
    List<UsageStats> listUsageStats = usageStatsManager.queryUsageStats(
    UsageStatsManager.INTERVAL_BEST, beginTime, endTime);
    if (null == mListUsageStats) {
    mListUsageStats = new ArrayList<UsageStats>();
    }
    mListUsageStats.clear();

    for (int i = 0; i < listUsageStats.size(); i++) {
    mUsageStats = listUsageStats.get(i);
    String packageName = mUsageStats.getPackageName();
    long totalTimeInForeground = mUsageStats.getTotalTimeInForeground();
    long getLastTimeUsed = mUsageStats.getLastTimeUsed();
    long getFirstTimeStamp = mUsageStats.getFirstTimeStamp();
    int lastEvent = getLastEvent(mUsageStats);
    int launchCount = getLaunchCount(mUsageStats);
    int recentLaunchCount = getRecentPackageLaunchCount(packageName);
    if (DEBUG) {
    LogUtil.d(TAG + "* getUsageStatsList i:" + i + " packageName:" + packageName
    + " launchCount:" + launchCount + " recentLaunchCount:" + recentLaunchCount
    + " totalTimeInForeground:" + totalTimeInForeground
    + " lastEvent:" + lastEvent
    + " getFirstTimeStamp:" + getFirstTimeStamp
    + " getLastTimeUsed:" + getLastTimeUsed + " beginTime:" + beginTime);
    }
    if ((totalTimeInForeground > 0 || UsageEvents.Event.MOVE_TO_FOREGROUND == lastEvent)
    && !inOpenAppStatsIgnorePackages(packageName)
    && (getLastTimeUsed > beginTime || getFirstTimeStamp > beginTime)
    && (launchCount == 0 || launchCount > recentLaunchCount)) {
    LogUtil.d(TAG + "* getUsageStatsList add "
    + " packageName:" + packageName + " lastEvent:" + lastEvent
    + " launchCount:" + launchCount + " recentLaunchCount:" + recentLaunchCount
    + " totalTimeInForeground:" + totalTimeInForeground);
    mListUsageStats.add(mUsageStats);
    }
    setRecentPackageLaunchCount(packageName, launchCount);
    }
    if (DEBUG) {
    LogUtil.d(TAG + "getUsageStatsList mListUsageStats.size():"
    + (null == mListUsageStats ? null : mListUsageStats.size()));
    }
    return mListUsageStats;
    }

    private static int getRecentPackageLaunchCount(String packageName) {
    int launchCount =0;//todo
    return launchCount;
    }

    private static void setRecentPackageLaunchCount(String packageName, int launchCount) {
    if (DEBUG) {
    LogUtil.d(TAG + "setRecentPackageLaunchCount packageName:" + packageName
    + " launchCount:" + launchCount);
    }
    //todo
    }

    /**
    * get LaunchCount by reflect.
    * hint: this function can only used before android 8.1.
    * android 8.1 can not use reflect any more.
    *
    * @param usageStats usageStats.
    * @return
    */
    public static int getLaunchCount(UsageStats usageStats) {
    int launchCount = 0;
    try {
    Class c = usageStats.getClass();
    Field field = c.getDeclaredField("mLaunchCount");
    field.setAccessible(true);
    launchCount = field.getInt(usageStats);
    } catch (Exception e) {
    LogUtil.d(TAG + "getLaunchCount() error:" + e.toString());
    e.printStackTrace();
    }
    return launchCount;
    }

    /**
    * get LastEvent by reflect.
    * hint: this function can only used before android 8.1.
    * android 8.1 can not use reflect any more.
    *
    * @param usageStats usageStats.
    * @return
    */
    private static int getLastEvent(UsageStats usageStats) {
    int lastEvent = 0;
    try {
    Class c = usageStats.getClass();
    Field field = c.getDeclaredField("mLastEvent");
    field.setAccessible(true);
    lastEvent = field.getInt(usageStats);
    } catch (Exception e) {
    LogUtil.d(TAG + "getLastEvent() error:" + e.toString());
    e.printStackTrace();
    }
    return lastEvent;
    }

    /**
    * To check package whether in OpenAppStatsIgnorePackages.
    *
    * @param packageName packageName.
    * @return boolean.
    */
    public static boolean inOpenAppStatsIgnorePackages(String packageName) {
    int length = AppConstants.OPEN_APP_STATS_IGNORE_PACKAGES.length;
    for (int i = 0; i < length; i++) {
    if (AppConstants.OPEN_APP_STATS_IGNORE_PACKAGES[i].equals(packageName)) {
    return true;
    }
    }
    return false;
    }

    /**
    * Check whether packageName in UsageStats List.
    *
    * @param packageName Package name.
    * @param listUsageStats List of UsageStats.
    * @return boolean.
    */
    public static boolean checkInUsageStatsList(String packageName,
    List<UsageStats> listUsageStats) {
    for (int i = 0; i < listUsageStats.size(); i++) {
    UsageStats usageStats = listUsageStats.get(i);
    if (packageName.equals(usageStats.getPackageName())) {
    return true;
    }
    }
    return false;
    }

    }
  • 相关阅读:
    SQLSERVER Tempdb的作用及优化
    sqlserver分区表索引
    Install the mongdb
    mysql常用参数监控
    Mysql由浅入深
    nginx配置文件优化
    ping主机不通邮件报警
    top结果解释
    了解MQ
    kafka安装部署
  • 原文地址:https://www.cnblogs.com/adamli/p/13139881.html
Copyright © 2011-2022 走看看