ComponentName DefaultLauncher=new
ComponentName(“com.android.launcher3”,“com.android.launcher3.Launcher”); //此处设置默认Launcher的包
类名
//Slog.d(TAG,“set default launcher”);
final PackageManager mPm = mContext.getPackageManager();
ArrayList homeActivities = new ArrayList();
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);
ListActivities=new ArrayList();
mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY,mHomeComponentSet, DefaultLauncher);
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 resolveInfoList = queryIntentActivities(intent,null, PackageManager.GET_meta_DATA,callingUserId);
if(resolveInfoList != null){
int size = resolveInfoList.size();
for(int j=0;j 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 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; } } Slog.e(TAG,“defaultMatch=”+Integer.toHexString(defaultMatch)); IntentFilter filter=new IntentFilter(); filter.addAction(Intent.ACTION_MAIN); filter.addCate 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》 【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享 gory(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 " if (DEBUG_PREFERRED) { Slog.v(TAG, "Removing preferred activity since set changed " } pir.removeFilter(pa); // Re-add the filter as a “last chosen” entry (!always) PreferredActivity lastChosen = new PreferredActivity( 都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。 技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块; 我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 PDF(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。 Java语言与原理; 高级UI与自定义view; 性能调优; NDK开发; 前沿技术; 网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。 我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多 当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。 不出半年,你就能看出变化! img-7p8Isljo-1640918593950)] 网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。 我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多 当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。 不出半年,你就能看出变化! 本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录
大厂,小厂。Android面试先看你熟不熟悉Java语言
自定义view,Android开发的基本功。
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
未来的方向,高薪必会。
组件化,热升级,热修复,框架设计



