写点什么

Android MTK 设置默认启动 Launcher,android 实战 pdf

发布于: 2021 年 11 月 08 日

//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


*/


Intent intent = getHomeIntent();


ActivityInfo aInfo =


resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);


...... PS:


二、如果预置了 GMS,上面和下面合并,还需要按照下面的方法修改:


请找到 PackageManagerService.java 的 systemReady 方法,在这个方法的最后增加以下示例代码:


if(isFirstBoot()) {


String examplePackageName = "com.android.launcher"; //请修改为需要设置的 package name


String exampleActivityName = "com.android.launcher2.Launcher"; //请修改为需要设置的 launcher activity name


Intent intent=new Intent(Intent.ACTION_MAIN);


intent.addCategory(Intent.CATEGORY_HOME);


final int callingUserId = UserHandle.getCallingUserId();


List<ResolveInfo> resolveInfoList = queryIntentActivities(intent,null, PackageManager.GET_META_DATA,callingUserId);


if(resolveInfoList != null){


int size = resolveInfoList.size();


for(int j=0;j<size;){


final ResolveInfo r = resolveInfoList.get(j);


if(!r.activityInfo.packageName.equals(examplePackageName)){


resolveInfoList.remove(j);


size -= 1;


}else


{


j++;


}


}


ComponentName[] set = new ComponentName[size];


ComponentName defaultLauncher=new ComponentName(examplePackageName, exampleActivityName);


int defaultMatch=0;


for(int i=0;i<size;i++){


final ResolveInfo resolveInfo = resolveInfoList.get(i);


Log.d(TAG, resolveInfo.toString());


set[i] = new ComponentName(resolveInfo.activityInfo.packageName,resolveInfo.activityInfo.name);


if(defaultLauncher.getClassName().equals(resolveInfo.activityInfo.name)){


defaultMatch = resolveInfo.match;


}


}


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


Slog.e(TAG,"defaultMatch="+Integer.toHexString(defaultMatch));


IntentFilter filter=new IntentFilter();


filter.addAction(Intent.ACTION_MAIN);


filter.addCategory(Intent.CATEGORY_HOME);


filter.addCategory(Intent.CATEGORY_DEFAULT);


addPreferredActivity2(filter, defaultMatch, set, defaultLauncher);


}


//MTK ADD END


}


在 PackageManagerService.java 中增加 addPreferredActivity2 方法:


public void addPreferredActivity2(IntentFilter filter, int match,ComponentName[] set, ComponentName activity) {


synchronized (mPackages) {


filter.dump(new LogPrinter(Log.INFO, TAG), " ");


mSettings.editPreferredActivitiesLPw(0).addFilter(new PreferredActivity(filter, match, set, activity, true));


scheduleWriteSettingsLocked();


}


}


请修改 PackageManagerService.java 的 findPreferredActivity 方法,将以下代码:


if (removeMatches) {


pir.removeFilter(pa);


if (DEBUG_PREFERRED) {


Slog.v(TAG, "Removing match " + pa.mPref.mComponent);


}


break;


}


// Okay we found a previously set preferred or last chosen app.


// If the result set is different from when this


// was created, we need to clear it and re-ask the


// user their preference, if we're looking for an "always" type entry.


if (always && !pa.mPref.sameSet(query, priority)) {


Slog.i(TAG, "Result set changed, dropping preferred activity for "


  • intent + " type " + resolvedType);


if (DEBUG_PREFERRED) {


Slog.v(TAG, "Removing preferred activity since set changed "


  • pa.mPref.mComponent);


}


pir.removeFilter(pa);


// Re-add the filter as a "last chosen" entry (!always)


PreferredActivity lastChosen = new PreferredActivity(


pa, pa.mPref.mMatch, null, pa.mPref.mComponent, false);


pir.addFilter(lastChosen);


mSettings.writePackageRestrictionsLPr(userId);


return null;


}


修改为:


if(!(intent.getAction() != null && intent.getAction().equals(intent.ACTION_MAIN) && intent.getCategories()!=null &&


intent.getCategories().contains(intent.CATEGORY_HOME))) { //MTK ADD


Slog.d(TAG,"launcher");


}else {


if (removeMatches) {


pir.removeFilter(pa);


if (DEBUG_PREFERRED) {


Slog.v(TAG, "Removing match " + pa.mPref.mComponent);


}


break;


}


}


// Okay we found a previously set preferred or last chosen app.


// If the result set is different from when this


// was created, we need to clear it and re-ask the

评论

发布
暂无评论
Android MTK 设置默认启动 Launcher,android实战pdf