平板上有多个launcher,第一次使用的时候会提示选择哪个launcher。
frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
选择的界面是ResolverActivity,里面的addPreferredActivity就是设置默认app的。
修改方法如下:
[Launcher]Set default launcher
diff --git a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
old mode 100644
new mode 100755
index fadc15912dc..fea616e17a5
--- a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
+++ b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
@@ -100,8 +100,9 @@ import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
-
+//kte modified by <dengli>@<20210705> for <add ro.kte.laucher.package set default laucher>
+import android.os.SystemProperties;
+//kte modified by <dengli>@<20210705> for <add ro.kte.laucher.package set default laucher>
/**
* This activity is displayed when the system attempts to start an Intent for
* which there is more than one matching activity, allowing the user to decide
@@ -381,6 +382,17 @@ public class ResolverActivity extends Activity implements
boolean filterLastUsed = mSupportsAlwaysUseOption && !isVoiceInteraction()
&& !shouldShowTabs();
mMultiProfilePagerAdapter = createMultiProfilePagerAdapter(initialIntents, rList, filterLastUsed);
+ //kte modified by <dengli>@<20210705> for <add ro.kte.laucher.package set default laucher>
+ String launcherPackagename = SystemProperties.get("ro.kte.laucher.package");
+ String launcherActivityname = SystemProperties.get("ro.kte.laucher.activity");
+ if(launcherPackagename != null && launcherPackagename.length()>0 &&launcherActivityname != null && launcherActivityname.length()>0){
+ if(mResolvingHome){
+ setDefaultLauncher(launcherPackagename,launcherActivityname);
+ finish();
+ return;
+ }
+ }
+ //kte modified by <dengli>@<20210705> for <add ro.kte.laucher.package set default laucher>
if (configureContentView()) {
return;
}
@@ -433,7 +445,36 @@ public class ResolverActivity extends Activity implements
intent.getAction() + ":" + intent.getType() + ":"
+ (categories != null ? Arrays.toString(categories.toArray()) : ""));
}
-
+ //kte modified by <dengli>@<20210705> for <add ro.kte.laucher.package set default laucher>
+ private void setDefaultLauncher(String defPackageName,String defClassName) {
+ try {
+ final PackageManager pm = getPackageManager();
+ //Log.e("deflauncher", "deflauncher : PackageName = " +defPackageName + " ClassName = " + defClassName);
+ IntentFilter filter = new IntentFilter();
+ filter.addAction("android.intent.action.MAIN");
+ filter.addCategory("android.intent.category.HOME");
+ filter.addCategory("android.intent.category.DEFAULT");
+
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_HOME);
+ List<ResolveInfo> list = new ArrayList<ResolveInfo>();
+ list = pm.queryIntentActivities(intent, 0);
+ final int N = list.size();
+ ComponentName[] set = new ComponentName[N];
+ int bestMatch = 0;
+ for (int i = 0; i < N; i++) {
+ ResolveInfo r = list.get(i);
+ set[i] = new ComponentName(r.activityInfo.packageName,
+ r.activityInfo.name);
+ if (r.match > bestMatch) bestMatch = r.match;
+ }
+ ComponentName preActivity = new ComponentName(defPackageName, defClassName);
+ pm.addPreferredActivity(filter, bestMatch, set, preActivity);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ //kte modified by <dengli>@<20210705> for <add ro.kte.laucher.package set default laucher>
private boolean isIntentPicker() {
return getClass().equals(ResolverActivity.class);
}