原文:Android12 配置默认主屏幕 - 掘金 (juejin.cn)
作者:代码小偷
链接:https://juejin.cn/post/7272632260179787810
来源:稀土掘金
分析流程
APK Settings中的项目app下有对默认APP进行设置,如果没有手动设置默认的主屏幕APP选项一直为空。
DefaultHomeShortcutPreferenceController.java 为默认主屏幕选项控制器,其父类为DefaultAppShortcutPreferenceControllerBase.java,在父类中实现handlePreferenceTreeClick()方法,传入参数roleName = RoleManager.ROLE_HOME;
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(mPreferenceKey, preference.getKey())) {
return false;
}
final Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP)
.putExtra(Intent.EXTRA_ROLE_NAME, mRoleName);
mContext.startActivity(intent);
return true;
}
其中Intent.ACTION_MANAGE_DEFAULT_APP在Android\packages\modules\Permission\PermissionController中的DefaultAppActivity中接收,根据packagename进行追踪路径如下: DefaultAppActivity.java --->HandheldDefaultAppFragment.java --->DefaultAppChildFragment.java:setDefaultApp()---> ManageRoleHolderStateLiveData.java---> RoleService.java addRoleHolderAsUser()--->RoleControllerServiceImpl.java:onAddRoleHolder()--->RoleManager.java:addRoleHolderFromController()---> RoleService.java:addRoleHolderFromController()--->RoleUserState.java:addRoleHolder():readFile()--->RolesPersistenceImpl.java:ROLES_FILE_NAME = "roles.xml"
该XML位于Android\packages\modules\Permission\PermissionController\res\xml\roles.xml
修改内容
1.在该模块添加defaultHolders="config_defaultHome"
<role
name="android.app.role.HOME"
behavior="HomeRoleBehavior"
+++ defaultHolders="config_defaultHome"
description="@string/role_home_description"
exclusive="true"
label="@string/role_home_label"
overrideUserWhenGranting="true"
requestDescription="@string/role_home_request_description"
requestTitle="@string/role_home_request_title"
searchKeywords="@string/role_home_search_keywords"
shortLabel="@string/role_home_short_label">
......
2.在Android/frameworks/base/core/res/res/values/config.xml中添加字段:
<string name="config_defaultHome" translatable="false">包名</string>