Use specific app as startup launcher knowledge by default

Overview:

After the Android system is started, the native launcher is not used as the desktop of the Android system, but a specific app is used as the system desktop.

A detailed description

          ActivityManagerService.java is executed every time it is started, and the set launcher app is started by default every time. Of course, if the set launcher exists, setting other launchers as defaults will be invalid, because setDefaultLauncher() will be The current default launcher is cleared. Only after uninstalling the launcher that is set to be launched by default can other launchers be set as the default launcher. And the app we specify can be set as the launcher that is launched by default through the package name.

The value of packageName in the code is determined based on the package name of the respective apk.

Code

diff --git a/android4.4/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java b/android4.4/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
index 2068333194..3c4a0ec1ab 100755
--- a/android4.4/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
+++ b/android4.4/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java    
@@ -2955,6 +2955,43 @@ public final class ActivityManagerService extends ActivityManagerNative
         return intent;
     }
  
+      
+       private void setDefaultLauncher() {     
+                       String packageName = null;
+                       packageName = "包名";
+                       ComponentName setHome = null;     
+                       ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();     
+                       ComponentName currentDefaultHome  = mContext.getPackageManager().getHomeActivities(homeActivities);     
+                       if(currentDefaultHome != null)         
+                       {                 
+                               if(currentDefaultHome.getPackageName().equals(packageName))             
+                               {                        
+                                       return;                 
+                               }                 
+                               mContext.getPackageManager().clearPackagePreferredActivities(currentDefaultHome.getPackageName());
               
+                       }         
+                       ComponentName[] mHomeComponentSet = new ComponentName[homeActivities.size()];     
+                       for (int i = 0; i < homeActivities.size(); i++) {                 
+                               final ResolveInfo candidate = homeActivities.get(i);             
+                               final ActivityInfo info = candidate.activityInfo;                 
+                               ComponentName activityName = new ComponentName(info.packageName, info.name);             
+                               mHomeComponentSet[i] = activityName;             
+                               if(info.packageName.equals(packageName)){                         
+                                       setHome = activityName;                 
+                               }         
+                       }         
+                       if(setHome != null){             
+                               IntentFilter mHomeFilter;                 
+                               mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);             
+                               mHomeFilter.addCategory(Intent.CATEGORY_HOME);                 
+                               mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT);                 
+                               mContext.getPackageManager().replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY,             
+                                       mHomeComponentSet, setHome);     
+                       } 
+      
+                }
+      
+
     boolean startHomeActivityLocked(int userId) {
         if (mHeadless) {
             // Added because none of the other calls to ensureBootCompleted seem to fire
@@ -2970,6 +3007,8 @@ public final class ActivityManagerService extends ActivityManagerNative
             // error message and don't try to start anything.
             return false;
         }
+
+               setDefaultLauncher();
         Intent intent = getHomeIntent();
         ActivityInfo aInfo =
             resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);

Guess you like

Origin blog.csdn.net/qq_53676406/article/details/132470825