1Android桌面的简介:
在Android系统中,任何一个可见的界面都属于一个应用程序,桌面也是一个应用程序。例如,我们通常打开手机看到的第一个界面就属于桌面应用。Android系统会自带一个桌面应用,这个桌面App是系统App。同时,也有人(或公司)会开发第三方桌面应用,这类属于用户App,例如,Go桌面,点心桌面,MiUi的桌面。
2Android桌面的特点:
只要是桌面应用,就会有下面这个属性值:
"Android.intent.category.Home"
所以只要找出所有的声明为Home的activity的"android.intent.action.MAIN"所在的包名就可以了。
3 桌面相关代码:
3.1 获取桌面的代码:
/**
* 获得属于桌面的应用的应用包名称
* @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;
}
3.2判断是否是桌面:
然后就是在你的应用中需要判断是否是桌面(在service或者新线程之类的);
/**
* 判断当前界面是否是桌面
*/
public boolean isHome(){
ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
return homePackageNames.contains(rti.get(0).topActivity.getPackageName());
}
说明:
1)既然要判断当前界面,那就要判断当前的RunningTasks中的第一个;
2)引入ActivityManager获取RunningTasks;
3)取出RunningTasks中的topActivity的PackageName;
4)最后跟第一步得到的List做比较即可!
5)别忘了添加权限
<uses-permission android:name="android.permission.GET_TASKS" />