Android获取当前前台包名/进程的方法
获取当前前台进程的方法有很多,不过有的方法在高版本安卓可能不好使,通常5.0之前的设备可以用ActivityManager的getRunningTasks方法,5.0使用ActivityManager的getRunningAppprocesses方法,5.1及之后版本可以用UsageStatsManager的queryEvents方法 封装成一个方法如下: public static String getTopAppPackageName(Context context) { String packageName = ""; ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); try { if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){ List<ActivityManager.RunningTaskInfo> rti = activityManager.getRunningTasks(1); packageName = rti.get(0).topActivity.getPackageName(); } else if(Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { List<ActivityManager.RunningAppProcessInfo> processes = activityManager.getRunningAppProcesses(); if (processes.size() == 0) { return packageName; } for (ActivityManager.RunningAppProcessInfo process : processes) { if (process.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { return process.processName; } } } else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP){ final long end = System.currentTimeMillis(); final UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService( Context.USAGE_STATS_SERVICE); if (null == usageStatsManager) { return packageName; } final UsageEvents events = usageStatsManager.queryEvents((end – 60 * 1000), end); if (null == events) { return packageName; } UsageEvents.Event usageEvent = new UsageEvents.Event(); UsageEvents.Event lastMoveToFGEvent = null; while (events.hasNextEvent()) { events.getNextEvent(usageEvent); if (usageEvent.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) { lastMoveToFGEvent = usageEvent; } } if (lastMoveToFGEvent != null) { packageName = lastMoveToFGEvent.getPackageName(); } } }catch (Exception ignored){ } return packageName; } 其中5.1以上的api需要申请权限: android.permission.PACKAGE_USAGE_STATS private boolean isNoSwitch() { if (Build.VERSION.SDK_INT < 21) { return true; } List<UsageStats> queryUsageStats = ((UsageStatsManager) getApplicationContext(). getSystemService(Context.USAGE_STATS_SERVICE)) .queryUsageStats(4, 0, System.currentTimeMillis()); return queryUsageStats != null && !queryUsageStats.isEmpty(); … Read more