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);