您的位置:首页 > 移动开发 > Android开发

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

2017-08-31 11:12 393 查看
获取当前界面是否为桌面,需要用到
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!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: