问题:替换原生Launcher,换成指定包名设置的应用为默认Launcher
ActivityManagerService.java
地址:\frameworks\base\services\core\java\com\android\server\am\
//add set xxx default launcher 20231219 start
/**
* 通过指定包名设置,可以换成读取配置来进行指定,操作性高,但这里为指定应用,所以不做可配置功能
*/
private String pkgname = "xxx.xxxxx.xxxx";
private ActivityInfo setDefaultLauncher() {
ActivityInfo aInfo =null;
//查找是否有指定包名的应用
PackageManager pm = mContext.getPackageManager();
Intent newintent = new Intent(Intent.ACTION_MAIN);
newintent.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(newintent, 0);
boolean bisLoadLaucher = false;
if(resolveInfoList != null){
int size = resolveInfoList.size();
boolean ispaired = false;
for(int i = 0; i < size; i++){
ResolveInfo rInfo = resolveInfoList.get(i);
Log.d(TAG, " resolvePackageName = "+rInfo.activityInfo.packageName);
if(rInfo.activityInfo.packageName.equals(pkgname)){
aInfo = rInfo.activityInfo;
android.provider.Settings.System.putString(mContext.getContentResolver(), "default.pkgname", pkgname);
android.provider.Settings.System.putInt(mContext.getContentResolver(), "defalutLauncherSetState", 1);
ispaired = true;
break;
}
}
if(!ispaired && !bisLoadLaucher){
try {
pm.getPackageInfo(pkgname, PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException e) {
Log.d(TAG, " def launcher pkgname no exist ");
android.provider.Settings.System.putString(mContext.getContentResolver(), "default.pkgname", "");
android.provider.Settings.System.putInt(mContext.getContentResolver(), "defaultLauncherSetState", 0);
return null;
}
}
}
return aInfo;
}
//add set xxx default launcher 20231219 end
调用
boolean startHomeActivityLocked(int userId, String reason) {
...
if (aInfo != null) {
//add for set xxx default launcher 20231219 start
ActivityInfo customAInfo = setDefaultLauncher();
if (null != customAInfo) {
aInfo = customAInfo;
}
//add for set xxx default launcher 20231219 end
}
}
Android学习笔记:Zcutie’s知识花园