android6.0设置默认Luncher方式

来源:互联网 发布:网络二哥是什么意思 编辑:程序博客网 时间:2024/06/05 03:02

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

原创粉丝点击