android.app.ActivityManager.RunningTaskInfo#android.app.usage.UsageStatsManager源码实例Demo

下面列出了android.app.ActivityManager.RunningTaskInfo#android.app.usage.UsageStatsManager 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: android_9.0.0_r45   文件: AppStateTracker.java
@Override
public void onAppIdleStateChanged(String packageName, int userId, boolean idle,
        int bucket, int reason) {
    if (DEBUG) {
        Slog.d(TAG,"onAppIdleStateChanged: " + packageName + " u" + userId
                + (idle ? " idle" : " active") + " " + bucket);
    }
    final boolean changed;
    if (bucket == UsageStatsManager.STANDBY_BUCKET_EXEMPTED) {
        changed = mExemptedPackages.add(userId, packageName);
    } else {
        changed = mExemptedPackages.remove(userId, packageName);
    }
    if (changed) {
        mHandler.notifyExemptChanged();
    }
}
 
源代码2 项目: android_9.0.0_r45   文件: AlarmManagerService.java
/**
 * Return the minimum time that should elapse before an app in the specified bucket
 * can receive alarms again
 */
private long getMinDelayForBucketLocked(int bucket) {
    // UsageStats bucket values are treated as floors of their behavioral range.
    // In other words, a bucket value between WORKING and ACTIVE is treated as
    // WORKING, not as ACTIVE.  The ACTIVE and NEVER bucket apply only at specific
    // values.
    final int index;

    if (bucket == UsageStatsManager.STANDBY_BUCKET_NEVER) index = NEVER_INDEX;
    else if (bucket > UsageStatsManager.STANDBY_BUCKET_FREQUENT) index = RARE_INDEX;
    else if (bucket > UsageStatsManager.STANDBY_BUCKET_WORKING_SET) index = FREQUENT_INDEX;
    else if (bucket > UsageStatsManager.STANDBY_BUCKET_ACTIVE) index = WORKING_INDEX;
    else index = ACTIVE_INDEX;

    return mConstants.APP_STANDBY_MIN_DELAYS[index];
}
 
private int bucketNameToBucketValue(String name) {
    String lower = name.toLowerCase();
    if (lower.startsWith("ac")) {
        return UsageStatsManager.STANDBY_BUCKET_ACTIVE;
    } else if (lower.startsWith("wo")) {
        return UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
    } else if (lower.startsWith("fr")) {
        return UsageStatsManager.STANDBY_BUCKET_FREQUENT;
    } else if (lower.startsWith("ra")) {
        return UsageStatsManager.STANDBY_BUCKET_RARE;
    } else if (lower.startsWith("ne")) {
        return UsageStatsManager.STANDBY_BUCKET_NEVER;
    } else {
        try {
            int bucket = Integer.parseInt(lower);
            return bucket;
        } catch (NumberFormatException nfe) {
            getErrPrintWriter().println("Error: Unknown bucket: " + name);
        }
    }
    return -1;
}
 
源代码4 项目: Shelter   文件: FreezeService.java
@Override
public void onReceive(Context context, Intent intent) {
    // Save usage statistics right now!
    // We need to use the statics at this moment
    // for "skipping foreground apps"
    // No app is foreground after the screen is locked.
    mScreenLockTime = new Date().getTime();
    if (SettingsManager.getInstance().getSkipForegroundEnabled() &&
            Utility.checkUsageStatsPermission(FreezeService.this)) {
        UsageStatsManager usm = getSystemService(UsageStatsManager.class);
        mUsageStats = usm.queryAndAggregateUsageStats(mScreenLockTime - APP_INACTIVE_TIMEOUT, mScreenLockTime);
    }

    // Delay the work so that it can be canceled if the screen
    // gets unlocked before the delay passes
    mHandler.postDelayed(mFreezeWork,
            ((long) SettingsManager.getInstance().getAutoFreezeDelay()) * 1000);
    registerReceiver(mUnlockReceiver, new IntentFilter(Intent.ACTION_SCREEN_ON));
}
 
源代码5 项目: flutter-plugins   文件: Stats.java
/** Produces a map for each installed app package name,
 * with the corresponding time in foreground in seconds for that application.
 */
@SuppressWarnings("ResourceType")
public static HashMap<String, Double> getUsageMap(Context context, long start, long end) {
    UsageStatsManager manager = (UsageStatsManager) context.getSystemService("usagestats");
    Map<String, UsageStats> usageStatsMap = manager.queryAndAggregateUsageStats(start, end);
    HashMap<String, Double> usageMap = new HashMap<>();

    for (String packageName : usageStatsMap.keySet()) {
        UsageStats us = usageStatsMap.get(packageName);
        try {
            long timeMs = us.getTotalTimeInForeground();
            Double timeSeconds = new Double(timeMs / 1000);
            usageMap.put(packageName, timeSeconds);
        } catch (Exception e) {
            Log.d(TAG, "Getting timeInForeground resulted in an exception");
        }
    }
    return usageMap;
}
 
源代码6 项目: FCM-for-Mojo   文件: UsageStatsUtils.java
public static String getForegroundPackage(UsageStatsManager usageStatsManager) {
    String packageName = null;

    final long INTERVAL = 1000 * 60;
    final long end = System.currentTimeMillis();
    final long begin = end - INTERVAL;
    final UsageEvents usageEvents = usageStatsManager.queryEvents(begin, end);
    while (usageEvents.hasNextEvent()) {
        UsageEvents.Event event = new UsageEvents.Event();
        usageEvents.getNextEvent(event);
        switch (event.getEventType()) {
            case UsageEvents.Event.MOVE_TO_FOREGROUND:
                packageName = event.getPackageName();
                break;
            case UsageEvents.Event.MOVE_TO_BACKGROUND:
                if (event.getPackageName().equals(packageName)) {
                    packageName = null;
                }
        }
    }

    return packageName;
}
 
源代码7 项目: lockit   文件: AppLockService.java
private String currentPackage() {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        UsageStatsManager usm = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE);
        long time = System.currentTimeMillis();
        List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,
                time - 1000 * 1000, time);
        if (appList != null && appList.size() > 0) {
            SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
            for (UsageStats usageStats : appList) {
                mySortedMap.put(usageStats.getLastTimeUsed(),
                        usageStats);
            }
            if (mySortedMap != null && !mySortedMap.isEmpty()) {
                return mySortedMap.get(
                        mySortedMap.lastKey()).getPackageName();
            }
        }
    }

    return currentTask().topActivity.getPackageName();
}
 
源代码8 项目: Mount   文件: PolicyUtils.java
@SuppressWarnings("WrongConstant")
public static String getForegroundAppPackageName(Context context) {
    UsageStatsManager manager = (UsageStatsManager) context.getSystemService("usagestats");
    long time = System.currentTimeMillis();
    List<UsageStats> list = manager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,
            time - 1000 * 1000, time);
    if (list != null && !list.isEmpty()) {
        SortedMap<Long, UsageStats> map = new TreeMap<>();
        for (UsageStats stats : list) {
            map.put(stats.getLastTimeUsed(), stats);
        }

        if (!map.isEmpty()) {
            return map.get(map.lastKey()).getPackageName();
        }
    }

    return null;
}
 
源代码9 项目: UseTimeStatistic   文件: EventUtils.java
@SuppressWarnings("ResourceType")
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static ArrayList<UsageEvents.Event> getEventList(Context context, long startTime, long endTime){
    ArrayList<UsageEvents.Event> mEventList = new ArrayList<>();

    Log.i(TAG," EventUtils-getEventList()   Range start:" + startTime);
    Log.i(TAG," EventUtils-getEventList()   Range end:" +endTime);
    Log.i(TAG," EventUtils-getEventList()   Range start:" + dateFormat.format(startTime));
    Log.i(TAG," EventUtils-getEventList()   Range end:" + dateFormat.format(endTime));

    UsageStatsManager mUsmManager = (UsageStatsManager) context.getSystemService("usagestats");
    UsageEvents events = mUsmManager.queryEvents(startTime, endTime);

    while (events.hasNextEvent()) {
        UsageEvents.Event e = new UsageEvents.Event();
        events.getNextEvent(e);
        if (e != null && (e.getEventType() == 1 || e.getEventType() == 2)) {
            Log.i(TAG," EventUtils-getEventList()  "+e.getTimeStamp()+"   event:" + e.getClassName() + "   type = " + e.getEventType());
            mEventList.add(e);
        }
    }

    return mEventList;
}
 
源代码10 项目: UseTimeStatistic   文件: EventUtils.java
@SuppressWarnings("ResourceType")
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static ArrayList<UsageStats> getUsageList(Context context, long startTime, long endTime) {

    Log.i(TAG," EventUtils-getUsageList()   Range start:" + startTime);
    Log.i(TAG," EventUtils-getUsageList()   Range end:" + endTime);
    Log.i(TAG," EventUtils-getUsageList()   Range start:" + dateFormat.format(startTime));
    Log.i(TAG," EventUtils-getUsageList()   Range end:" + dateFormat.format(endTime));

    ArrayList<UsageStats> list = new ArrayList<>();

    UsageStatsManager mUsmManager = (UsageStatsManager) context.getSystemService("usagestats");
    Map<String, UsageStats> map = mUsmManager.queryAndAggregateUsageStats(startTime, endTime);
    for (Map.Entry<String, UsageStats> entry : map.entrySet()) {
        UsageStats stats = entry.getValue();
        if(stats.getTotalTimeInForeground() > 0){
            list.add(stats);
            Log.i(TAG," EventUtils-getUsageList()   stats:" + stats.getPackageName() + "   TotalTimeInForeground = " + stats.getTotalTimeInForeground());
        }
    }

    return list;
}
 
源代码11 项目: Taskbar   文件: TaskbarController.java
@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
private List<AppEntry> getAppEntriesUsingUsageStats() {
    UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    List<UsageStats> usageStatsList = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, searchInterval, System.currentTimeMillis());
    List<AppEntry> entries = new ArrayList<>();

    for(UsageStats usageStats : usageStatsList) {
        AppEntry newEntry = new AppEntry(
                usageStats.getPackageName(),
                null,
                null,
                null,
                false
        );

        newEntry.setTotalTimeInForeground(usageStats.getTotalTimeInForeground());
        newEntry.setLastTimeUsed(usageStats.getLastTimeUsed());
        entries.add(newEntry);
    }

    return entries;
}
 
源代码12 项目: foregroundappchecker   文件: LollipopDetector.java
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public String getForegroundApp(final Context context) {
    if(!Utils.hasUsageStatsPermission(context))
        return null;

    String foregroundApp = null;

    UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Service.USAGE_STATS_SERVICE);
    long time = System.currentTimeMillis();

    UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 3600, time);
    UsageEvents.Event event = new UsageEvents.Event();
    while (usageEvents.hasNextEvent()) {
        usageEvents.getNextEvent(event);
        if(event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
            foregroundApp = event.getPackageName();
        }
    }

    return foregroundApp ;
}
 
源代码13 项目: More-For-GO   文件: MainService.java
@Override
public boolean isGoRunning() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
        UsageStatsManager usm = (UsageStatsManager) getSystemService(USAGE_STATS_SERVICE);
        long time = System.currentTimeMillis();
        List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - REFRESH_INTERVAL * REFRESH_INTERVAL, time);
        if (appList != null && appList.size() > 0) {
            SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>();
            for (UsageStats usageStats : appList) {
                mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
            }
            if (!mySortedMap.isEmpty()) {
                String currentAppName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
                return (currentAppName.equals("com.android.systemui") || currentAppName.equals("com.tomer.poke.notifier") || currentAppName.equals(getPackageName())) ? isGoOpen : currentAppName.equals(Constants.GOPackageName);
            }
        }
    } else {
        ActivityManager am = (ActivityManager) getBaseContext().getSystemService(ACTIVITY_SERVICE);
        return am.getRunningTasks(1).get(0).topActivity.getPackageName().equals(Constants.GOPackageName);
    }
    return isGoOpen;
}
 
源代码14 项目: MobileGuard   文件: ProcessManagerEngine.java
/**
 * get current task top app package name
 * @param context
 * @param am
 * @return the top app package name
 */
public static String getTaskTopAppPackageName(Context context, ActivityManager am) {
    String packageName = "";
    // if the sdk >= 21. It can only use getRunningAppProcesses to get task top package name
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        UsageStatsManager usage = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
        long time = System.currentTimeMillis();
        List<UsageStats> stats = usage.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);
        if (stats != null) {
            SortedMap<Long, UsageStats> runningTask = new TreeMap<Long,UsageStats>();
            for (UsageStats usageStats : stats) {
                runningTask.put(usageStats.getLastTimeUsed(), usageStats);
            }
            if (runningTask.isEmpty()) {
                return null;
            }
            packageName =  runningTask.get(runningTask.lastKey()).getPackageName();
        }
    } else {// if sdk <= 20, can use getRunningTasks
        List<ActivityManager.RunningTaskInfo> infos = am.getRunningTasks(1);
        packageName = infos.get(0).topActivity.getPackageName();
    }
    return packageName;
}
 
源代码15 项目: GrabQQPWD   文件: BackgroundDetectService.java
@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
private String getTopActivityAfterLM() {
    try {
        UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
        long milliSecs = 60 * 1000;
        Date date = new Date();
        List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime());
        if (queryUsageStats.size() > 0) {
            return null;
        }
        long recentTime = 0;
        String recentPkg = "";
        for (int i = 0; i < queryUsageStats.size(); i++) {
            UsageStats stats = queryUsageStats.get(i);
            if (stats.getLastTimeStamp() > recentTime) {
                recentTime = stats.getLastTimeStamp();
                recentPkg = stats.getPackageName();
            }
        }
        return recentPkg;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}
 
源代码16 项目: AppPlus   文件: UStats.java
@SuppressWarnings("ResourceType")
public static void getStats(Context context){
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats");
    int interval = UsageStatsManager.INTERVAL_YEARLY;
    Calendar calendar = Calendar.getInstance();
    long endTime = calendar.getTimeInMillis();
    calendar.add(Calendar.YEAR, -1);
    long startTime = calendar.getTimeInMillis();

    Log.d(TAG, "Range start:" + dateFormat.format(startTime) );
    Log.d(TAG, "Range end:" + dateFormat.format(endTime));

    UsageEvents uEvents = usm.queryEvents(startTime,endTime);
    while (uEvents.hasNextEvent()){
        UsageEvents.Event e = new UsageEvents.Event();
        uEvents.getNextEvent(e);

        if (e != null){
            Log.d(TAG, "Event: " + e.getPackageName() + "\t" +  e.getTimeStamp());
        }
    }
}
 
源代码17 项目: mollyim-android   文件: LogSectionPower.java
@Override
public @NonNull CharSequence getContent(@NonNull Context context) {
  final UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);

  if (usageStatsManager == null) {
    return "UsageStatsManager not available";
  }

  BucketInfo info = BucketInfo.getInfo(usageStatsManager, TimeUnit.DAYS.toMillis(3));

  return new StringBuilder().append("Current bucket: ").append(BucketInfo.bucketToString(info.getCurrentBucket())).append('\n')
                            .append("Highest bucket: ").append(BucketInfo.bucketToString(info.getBestBucket())).append('\n')
                            .append("Lowest bucket : ").append(BucketInfo.bucketToString(info.getWorstBucket())).append("\n\n")
                            .append(info.getHistory());
}
 
源代码18 项目: mollyim-android   文件: BucketInfo.java
public static @NonNull BucketInfo getInfo(@NonNull UsageStatsManager usageStatsManager, long overLastDurationMs) {
  StringBuilder stringBuilder = new StringBuilder();

  int currentBucket = usageStatsManager.getAppStandbyBucket();
  int worseBucket   = currentBucket;
  int bestBucket    = currentBucket;

  long              now           = System.currentTimeMillis();
  UsageEvents.Event event         = new UsageEvents.Event();
  UsageEvents       usageEvents   = usageStatsManager.queryEventsForSelf(now - overLastDurationMs, now);

  while (usageEvents.hasNextEvent()) {
    usageEvents.getNextEvent(event);

    if (event.getEventType() == UsageEvents.Event.STANDBY_BUCKET_CHANGED) {
      int appStandbyBucket = event.getAppStandbyBucket();

      stringBuilder.append(new Date(event.getTimeStamp()))
                   .append(": ")
                   .append("Bucket Change: ")
                   .append(bucketToString(appStandbyBucket))
                   .append("\n");

      if (appStandbyBucket > worseBucket) {
        worseBucket = appStandbyBucket;
      }
      if (appStandbyBucket < bestBucket) {
        bestBucket = appStandbyBucket;
      }
    }
  }

  return new BucketInfo(currentBucket, worseBucket, bestBucket, stringBuilder);
}
 
源代码19 项目: mollyim-android   文件: BucketInfo.java
/**
 * Not localized, for logs and debug only.
 */
public static String bucketToString(int bucket) {
  switch (bucket) {
    case UsageStatsManager.STANDBY_BUCKET_ACTIVE:      return "Active";
    case UsageStatsManager.STANDBY_BUCKET_FREQUENT:    return "Frequent";
    case UsageStatsManager.STANDBY_BUCKET_WORKING_SET: return "Working Set";
    case UsageStatsManager.STANDBY_BUCKET_RARE:        return "Rare";
    case                   STANDBY_BUCKET_EXEMPTED:    return "Exempted";
    default:                                           return "Unknown " + bucket;
  }
}
 
源代码20 项目: android_9.0.0_r45   文件: JobSchedulerService.java
public static int standbyBucketToBucketIndex(int bucket) {
    // Normalize AppStandby constants to indices into our bookkeeping
    if (bucket == UsageStatsManager.STANDBY_BUCKET_NEVER) return NEVER_INDEX;
    else if (bucket > UsageStatsManager.STANDBY_BUCKET_FREQUENT) return RARE_INDEX;
    else if (bucket > UsageStatsManager.STANDBY_BUCKET_WORKING_SET) return FREQUENT_INDEX;
    else if (bucket > UsageStatsManager.STANDBY_BUCKET_ACTIVE) return WORKING_INDEX;
    else return ACTIVE_INDEX;
}
 
源代码21 项目: ToDoList   文件: SettingsFragment.java
/**
 * 判断“查看应用使用情况”是否开启
 * @return
 */
private boolean isNoSwitch() {
    long ts = System.currentTimeMillis();
    if(Build.VERSION.SDK_INT >=21){
        //noinspection ResourceType
        usageStatsManager = (UsageStatsManager)getActivity().getApplicationContext().getSystemService("usagestats");
        queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, 0, ts);
    }
    if (queryUsageStats == null || queryUsageStats.isEmpty()) {
        return false;
    }
    return true;
}
 
源代码22 项目: ToDoList   文件: MainActivity.java
/**
 * 判断“查看应用使用情况”是否开启
 * @return
 */
private boolean isNoSwitch() {
    long ts = System.currentTimeMillis();
    if(Build.VERSION.SDK_INT >=21){
        //noinspection ResourceType
        usageStatsManager = (UsageStatsManager)this.getApplicationContext().getSystemService("usagestats");
        queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, 0, ts);
    }
    if (queryUsageStats == null || queryUsageStats.isEmpty()) {
        return false;
    }
    return true;
}
 
源代码23 项目: GotoSleep   文件: BedtimeNotificationReceiver.java
private boolean isUserActive(long startTime, long currentTime){
    String TAG = "isUserActive";
    if (currentNotification == 1){
        startTime = startTime - notificationDelay * ONE_MINUTE_MILLIS;
    }

    //#TODO experiment with using a daily interval (make sure it works past midnight)
    List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_WEEKLY, startTime, currentTime);

    UsageStats minUsageStat = null;

    long min = Long.MAX_VALUE;
    for (UsageStats usageStat : queryUsageStats){
        if ((System.currentTimeMillis() - usageStat.getLastTimeStamp() < min) && (usageStat.getTotalTimeInForeground() > ONE_MINUTE_MILLIS) && !usageStat.getPackageName().equals("com.corvettecole.gotosleep")){  //make sure app has been in foreground for more than one minute to filter out background apps
            minUsageStat = usageStat;
            min = System.currentTimeMillis() - usageStat.getLastTimeStamp();
        }
    }

    if (minUsageStat != null) {
        Log.d(TAG, minUsageStat.getPackageName() + " last time used: " + minUsageStat.getLastTimeUsed() + " time in foreground: " + minUsageStat.getTotalTimeInForeground());
        Log.d(TAG, "getLastTimeStamp: " + minUsageStat.getLastTimeStamp() + " getLastUsed: " + minUsageStat.getLastTimeUsed() + " current time: " + System.currentTimeMillis());
        Log.d(TAG, (System.currentTimeMillis() - minUsageStat.getLastTimeUsed() <= userActiveMargin * ONE_MINUTE_MILLIS) + "");
        return System.currentTimeMillis() - minUsageStat.getLastTimeStamp() <= userActiveMargin * ONE_MINUTE_MILLIS;
    } else {
        Log.e(TAG, "minUsageStat was null!");
        Log.e(TAG, queryUsageStats.toString());
        return false;
    }
}
 
源代码24 项目: timecat   文件: RunningTaskUtil.java
public boolean needToSet() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        long time = System.currentTimeMillis();
        // We get usage stats for the last 10 seconds
        List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 60, time);
        return stats.size() == 0;
    } else {
        return false;
    }
}
 
源代码25 项目: flutter-plugins   文件: Stats.java
/** Check if permission for usage statistics is required,
 * by fetching usage statistics since the beginning of time
 */
@SuppressWarnings("ResourceType")
public static boolean permissionRequired(Context context) {
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService("usagestats");
    Calendar calendar = Calendar.getInstance();
    long endTime = calendar.getTimeInMillis();
    long startTime = 0;
    List<UsageStats> stats = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);
    // If list is empty then permission ios required
    return stats.isEmpty();
}
 
源代码26 项目: KeyBlocker   文件: BaseMethod.java
public static String[] getCurrentPackageByManager(Context context) {
    String pkg_name = null;
    String act_name = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
        UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
        if (usageStatsManager != null) {
            long now = System.currentTimeMillis();
            List<UsageStats> stats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 6000, now);
            if (stats != null && !stats.isEmpty()) {
                int top = 0;
                for (int last = 0; last < stats.size(); last++) {
                    if (stats.get(last).getLastTimeUsed() > stats.get(top).getLastTimeUsed()) {
                        top = last;
                    }
                }
                pkg_name = stats.get(top).getPackageName();
            }
        }
    } else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        @SuppressWarnings("deprecation")
        List list = activityManager.getRunningTasks(1);
        pkg_name = ((ActivityManager.RunningTaskInfo) list.get(0)).topActivity.getPackageName();
        act_name = ((ActivityManager.RunningTaskInfo) list.get(0)).topActivity.getClassName();
    }
    if (pkg_name == null) {
        pkg_name = "";
    }
    if (act_name == null) {
        act_name = pkg_name;
    }
    if (act_name.contains("$")) {
        act_name = act_name.replace("$", ".");
    }
    return new String[]{pkg_name, act_name};
}
 
源代码27 项目: Taskbar   文件: TaskbarController.java
@VisibleForTesting
void filterForegroundApp(Context context,
                         SharedPreferences pref,
                         long searchInterval,
                         List<String> applicationIdsToRemove) {
    if (pref.getBoolean(PREF_HIDE_FOREGROUND, false)) {
        UsageStatsManager mUsageStatsManager =
                (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
        UsageEvents events =
                mUsageStatsManager.queryEvents(searchInterval, System.currentTimeMillis());
        UsageEvents.Event eventCache = new UsageEvents.Event();
        String currentForegroundApp = null;

        while (events.hasNextEvent()) {
            events.getNextEvent(eventCache);

            if (eventCache.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
                if (!(eventCache.getPackageName().contains(BuildConfig.BASE_APPLICATION_ID)
                        && !eventCache.getClassName().equals(MainActivity.class.getCanonicalName())
                        && !eventCache.getClassName().equals(HomeActivity.class.getCanonicalName())
                        && !eventCache.getClassName().equals(HomeActivityDelegate.class.getCanonicalName())
                        && !eventCache.getClassName().equals(SecondaryHomeActivity.class.getCanonicalName())
                        && !eventCache.getClassName().equals(InvisibleActivityFreeform.class.getCanonicalName()))) {
                    currentForegroundApp = eventCache.getPackageName();
                }
            }
        }

        if (!applicationIdsToRemove.contains(currentForegroundApp)) {
            applicationIdsToRemove.add(currentForegroundApp);
        }
    }
}
 
源代码28 项目: RelaxFinger   文件: AccessibilityUtil.java
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static boolean isUsageAccess() {
    long ts = System.currentTimeMillis();
    UsageStatsManager usageStatsManager = (UsageStatsManager)
            context.getSystemService(USAGE_STATS_SERVICE);
    List queryUsageStats = usageStatsManager.queryUsageStats(
            UsageStatsManager.INTERVAL_BEST, 0, ts);
    if (queryUsageStats == null || queryUsageStats.isEmpty()) {
        return false;
    }
    return true;
}
 
源代码29 项目: always-on-amoled   文件: CurrentAppResolver.java
@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
private String getActivePackages() {
    UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
    long time = System.currentTimeMillis();
    List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 200 * 200, time);
    if (appList != null && appList.size() > 0) {
        SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>();
        for (UsageStats usageStats : appList) {
            mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
        }
        return mySortedMap.get(mySortedMap.lastKey()).getPackageName();
    }
    return context.getPackageName();
}
 
源代码30 项目: AndroidProcess   文件: BackgroundUtil.java
/**
 * 方法4:通过使用UsageStatsManager获取,此方法是ndroid5.0A之后提供的API
 * 必须:
 * 1. 此方法只在android5.0以上有效
 * 2. AndroidManifest中加入此权限<uses-permission xmlns:tools="http://schemas.android.com/tools" android:name="android.permission.PACKAGE_USAGE_STATS"
 * tools:ignore="ProtectedPermissions" />
 * 3. 打开手机设置,点击安全-高级,在有权查看使用情况的应用中,为这个App打上勾
 *
 * @param context     上下文参数
 * @param packageName 需要检查是否位于栈顶的App的包名
 * @return
 */

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static boolean queryUsageStats(Context context, String packageName) {
    class RecentUseComparator implements Comparator<UsageStats> {
        @Override
        public int compare(UsageStats lhs, UsageStats rhs) {
            return (lhs.getLastTimeUsed() > rhs.getLastTimeUsed()) ? -1 : (lhs.getLastTimeUsed() == rhs.getLastTimeUsed()) ? 0 : 1;
        }
    }
    RecentUseComparator mRecentComp = new RecentUseComparator();
    long ts = System.currentTimeMillis();
    UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
    List<UsageStats> usageStats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, ts - 1000 * 10, ts);
    if (usageStats == null || usageStats.size() == 0) {
        if (HavaPermissionForTest(context) == false) {
            Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
            Toast.makeText(context, "权限不够\n请打开手机设置,点击安全-高级,在有权查看使用情况的应用中,为这个App打上勾", Toast.LENGTH_SHORT).show();
        }
        return false;
    }
    Collections.sort(usageStats, mRecentComp);
    String currentTopPackage = usageStats.get(0).getPackageName();
    if (currentTopPackage.equals(packageName)) {
        return true;
    } else {
        return false;
    }
}