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

来源:互联网 发布:怎么用sql语句降序排列 编辑:程序博客网 时间:2024/04/28 01:39

获取当前界面是否为桌面,需要用到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!!!

阅读全文
0 0
原创粉丝点击