1.设置默认Launcher,但不是唯一的,可以在设置里面去切换的方法。
frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java中的startHomeActivityLocked方法里面添加如下代码。
boolean startHomeActivityLocked(int userId, String reason) { if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL && mTopAction == null) { // We are running in factory test mode, but unable to find // the factory test app, so just sit around displaying the // error message and don't try to start anything. return false; }
/** * yf add * set default launcher */ ComponentName DefaultLauncher=new ComponentName("com.yougfeel.mywy","com.yougfeel.mywy.MainActivity"); //此处设置默认Launcher的包类名 //Slog.d(TAG,"set default launcher"); final PackageManager mPm = mContext.getPackageManager(); ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>(); ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities); ComponentName[]mHomeComponentSet = new ComponentName[homeActivities.size()]; for (int i = 0; i < homeActivities.size(); i++) { final ResolveInfo candidate = homeActivities.get(i); //Slog.d(TAG,"homeActivities"+candidate); final ActivityInfo info = candidate.activityInfo; ComponentName activityName = new ComponentName(info.packageName, info.name); mHomeComponentSet[i] = activityName; } IntentFilter mHomeFilter = new IntentFilter(Intent.ACTION_MAIN); mHomeFilter.addCategory(Intent.CATEGORY_HOME); mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT); List<ComponentName>Activities=new ArrayList(); mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY,mHomeComponentSet, DefaultLauncher); /** * set default launcher end */
2.设置默认唯一的Launcher,在不去掉其他Launcher的情况下。
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4238,6 +4238,15 @@ public class PackageManagerService extends IPackageManager.Stub { if (N == 1) { return query.get(0); } else if (N > 1) { + for(int i = 0; i < N; i++){ + ResolveInfo ri = query.get(i); + String default_Launcher = SystemProperties.get("ro.yf.default_Launcher", "none"); + if(default_Launcher.isEmpty() || default_Launcher.equals("none")){ + break; + }else if(ri.activityInfo.packageName.equals(default_Launcher)) { + return ri; + } + } final boolean debug = ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0);