判斷手機當前介面是不是Home介面的方法
阿新 • • 發佈:2019-02-07
/** * 判斷當前介面是否是在home頁面,如果是在home頁面,返回true,否則返回false, * 判斷是Home介面主要A:找到能能實現Home介面的程式集合,B:處於棧頂的活動是否包含在這個集合中 */ @SuppressWarnings("deprecation") public static boolean isHome(Context mContext) { if (Build.VERSION.SDK_INT < 21) { Log.e("TAG",Build.VERSION.SDK_INT+"" );//判斷當前手機的版本 Log.e("TAG", "看看是不是版本小於21就出現在這裡了"); ActivityManager mActivityManager = (ActivityManager) mContext .getSystemService(Context.ACTIVITY_SERVICE); List<String> strs = getHomes(mContext); List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1); if (strs != null && strs.size() > 0) { return strs.contains(rti.get(0).topActivity.getPackageName()); } else { return false; } } else { final int PROCESS_STATE_TOP = 2; try { // 獲取正在執行的程序應用的資訊實體中的一個欄位,通過反射獲取出來 Field processStateField = ActivityManager.RunningAppProcessInfo.class .getDeclaredField("processState"); // 獲取所有的正在執行的程序應用資訊實體物件 List<ActivityManager.RunningAppProcessInfo> processes = ((ActivityManager) mContext .getSystemService(Context.ACTIVITY_SERVICE)) .getRunningAppProcesses(); // 迴圈所有的程序,檢測某一個程序的狀態是最上面,也是就最近執行的一個應用的狀態的時候,就返回這個應用的包名 for (ActivityManager.RunningAppProcessInfo process : processes) { if (process.importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && process.importanceReasonCode == 0) { int state = processStateField.getInt(process); if (state == PROCESS_STATE_TOP) { // 如果這個實體物件的狀態為最近的執行應用 String[] packname = process.pkgList; // 返回應用的包名 //LogUtils.debug(packname[0]); Log.d("TAG", packname[0]); if (getPackageName(mContext).contains(packname[0])) { return false; } return getHomes(mContext).contains(packname[0]); } } } } catch (Exception e) { } return false; } } /** * 獲得屬於桌面的應用的應用包名稱 * * @return 返回所有能啟動桌面程式的應用程式,包括home鍵,和電源鍵 */ private static List<String> getHomes(Context mContext) { List<String> names = new ArrayList<String>(); PackageManager packageManager = mContext.getPackageManager(); // 屬性 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities( intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo ri : resolveInfo) { names.add(ri.activityInfo.packageName); Log.e("TAG",ri.activityInfo.packageName+" X "); } return names; } public static String getPackageName(Context context) { return context.getPackageName(); }