Android判断当前界面是否为桌面

xiaoxiao2021-02-28  139

获取当前界面是否为桌面,需要用到ActivityManager.getRunningTasks(1)这个方法,首先看一下这个方法的官方解释。

/** *@deprecated As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method * is no longer available to third party * applications: the introduction of document-centric recents means * it can leak person information to the caller. For backwards compatibility, * it will still retu rn a small subset of its data: at least the caller's * own tasks, and possibly some other tasks * such as home that are known to not be sensitive.

大致意思就是指,自从Android21之后该方法只能获取到自己应用的信息,获取不到其他包信息了,如果我们只需要判断我们自己的应用是否处于桌面,进行相应逻辑的处理是可以的。如果需要监听home键可以查看我的上篇Home监听。

照例,看一下判断桌面代码:

public static boolean isHomes() { try { ActivityManager mActivityManager = (ActivityManager)CallBlockerApplication.getInstance() .getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> rti = mActivityManager.getRunningTasks(1); List<String> strs = getHomes(); if(strs != null && strs.size() > 0 && rti != null && rti.size() > 0){ return strs.contains(rti.get(0).topActivity.getPackageName()); }else{ return false; } } catch (SecurityException e) { e.printStackTrace(); return false; } } /** * 获得属于桌面的应用的应用包名称 * @return 返回包含所有包名的字符串列表 */ public static List<String> getHomes() { List<String> names = new ArrayList<String>(); try { PackageManager packageManager = CallBlockerApplication.getInstance().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); } return names; } catch (Exception e) { e.printStackTrace(); return names; } }

ok!!!

转载请注明原文地址: https://www.6miu.com/read-28202.html

最新回复(0)