Launcher都有一个CATEGORY_HOME属性,可以根据这个属性筛选Launcher
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> packageInfos = getPackageManager().queryIntentActivities(intent, 0);
for (int i = 0; i < packageInfos.size(); i++) {
String launcherActivityName = packageInfos.get(i).activityInfo.name;
String packageName = packageInfos.get(i).activityInfo.packageName;
Log.i("appappinfo", i + " -- launcherActivityName: " + launcherActivityName);
Log.e("appappinfo", i + " -- packageName: " + packageName);
}
/**
* 获取正在运行桌面包名(注:存在多个桌面时且未指定默认桌面时,该方法返回Null,使用时需处理这个情况)
*/
public static String getLauncherPackageName(Context context) {
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final ResolveInfo res = context.getPackageManager().resolveActivity(intent, 0);
if (res.activityInfo == null) {
// should not happen. A home is always installed, isn't it?
return null;
}
if (res.activityInfo.packageName.equals("android")) {
// 有多个桌面程序存在,且未指定默认项时;
return null;
} else {
return res.activityInfo.packageName;
}
}