没有人插话,但这是我发现的一种解决方案。
唯一的问题是您需要指定您正在查找的包名称的某些部分(因为当有多个应用程序将自己注册为 HOME 时,您可能会这样做)。
所以下面的代码处理了我测试过的所有设备,但显然绝不是未来的证明。
void getDefaultLauncher() {
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0);
//String className = null;
for(ResolveInfo ri : list){
Log(TAG,"FOUND NATIVE LAUNCH ACTIVITY " + ri.activityInfo.packageName);
if(ri.activityInfo.packageName.contains("com.lge") ||
ri.activityInfo.packageName.contains("android") ||
ri.activityInfo.packageName.contains("motorola.homescreen") ||
ri.activityInfo.packageName.contains("htc.launcher") ){
startSpecificActivity(ri);
return;
}
}
Log(TAG,"DIDN'T FIND MATCHING HOME APP");
}
public void startSpecificActivity(ResolveInfo launchable) {
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName, activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}