Android 判断是否是主界面 - litonghui/TechBlog GitHub Wiki

Android 判断当前界面是否是主界面

1, 首先获得属于桌面的应用(系统原装应用,Go桌面等等)

1) 这些应用都会包含”android.intent.category.Home”
2) 找到所有的声明为Home的activity 的”android.intent.action.MAIN”包就可以
/**
 * 获得属于桌面的应用的应用包名称
 * @return 返回包含所有包名的字符串列表
 */
private List<String> getHomes() {
	List<String> names = new ArrayList<String>();
	PackageManager packageManager = this.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);
		System.out.println(ri.activityInfo.packageName);
	}
	return names;
}

2, 然后就在你的应用中需要判断是否是桌面(在service或者新线程之类的)

1) 既然要判断当前界面,那就要判断当前的RunningTasks中的第一个
2) 引入ActivityManager获取RunningTasks
3) 获取RunningTasks中的topActivity的PackageName
4) 最后等第一步得到的List作比较即可
/**
 * 判断当前界面是否是桌面
 */
public boolean isHome(){
	ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
	List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
	return homePackageNames.contains(rti.get(0).topActivity.getPackageName());
}
⚠️ **GitHub.com Fallback** ⚠️