沒有人插話,但這是我找到的解決方案。
唯一的問題是您需要指定您正在查找的包名稱的某個部分(因爲假設您有多個應用程序已將其自己註冊爲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);
}
我認爲你可以做到這一點,如果你知道有'ComponenetName.unflattenFromString(的packageName)設備上的桌面應用的包名'但是我覺得這不是一個真正的解決方案,因爲不是所有的設備將有一個「默認」啓動程序與我懷疑的包名相同。 – FoamyGuy 2013-02-14 16:17:06
是的,這就是我所擔心的。 – 2013-02-14 16:26:05