誰もチャイムを鳴らしませんでしたが、これは私がうまくいった解決策です。
唯一の問題は、探しているパッケージ名の一部を指定する必要があることです(おそらく、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);
}