Android13默认主屏幕

文章详细解析了Android12中如何通过APKSettings配置默认主屏幕应用,涉及DefaultHomeShortcutPreferenceController的处理逻辑和roles.xml文件的修改。介绍了从IntentACTION_MANAGE_DEFAULT_APP触发的追踪路径和config.xml中的新增字段。

原文: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>

要修改MTK平台Android系统的默认屏幕分辨率,通常需要在系统框架层进行配置。默认屏幕分辨率的设置主要涉及系统显示相关的配置文件或代码逻辑,例如 `DisplayManagerService` 或与设备树相关的配置文件。 在MTK平台上,修改默认分辨率的方法通常包括以下几个方面: 1. **修改系统属性配置文件** Android系统中,分辨率可以通过系统属性 `ro.sf.lcd_density` 来设置,该属性定义了屏幕的密度。虽然该属性主要影响DPI(每英寸点数),但在某些设备上可能与分辨率设置相关。此属性通常位于设备的 `build.prop` 文件中: ``` ro.sf.lcd_density=320 ``` 修改该值可以影响系统对屏幕密度的判断,从而间接影响UI布局的适配[^1]。 2. **修改DisplayManagerService中的默认配置** Android框架层的 `DisplayManagerService` 负责管理显示设备的配置,包括分辨率和刷新率等。可以通过修改 `DisplayMode` 的默认设置来更改默认分辨率。例如,在 `DisplayManagerService` 的初始化代码中找到类似以下的配置: ```java private void configureDefaultDisplayModeLocked(int displayId) { // 设置默认分辨率 final int defaultWidth = 1080; final int defaultHeight = 1920; final int defaultRefreshRate = 60; // ... } ``` 修改 `defaultWidth` 和 `defaultHeight` 可以更改默认的屏幕分辨率[^1]。 3. **修改设备树(Device Tree)配置** 在MTK平台上,某些设备的分辨率可能由设备树(Device Tree Blob, dtb)中的配置决定。设备树通常位于内核源码目录中,例如 `kernel-4.4/arch/arm64/boot/dts/mediatek/`。可以在设备树中找到与显示相关的节点,例如 `display-controller`,并修改其中的分辨率参数: ```dts display-controller { status = "okay"; display-timings { native-mode = <&timing0>; timing0 { clock-frequency = <148500000>; hactive = <1920>; vactive = <1080>; hfront-porch = <88>; hback-porch = <44>; hsync-len = <64>; vfront-porch = <4>; vback-porch = <5>; vsync-len = <5>; }; }; } ``` 上述代码中,`hactive` 和 `vactive` 分别表示水平和垂直分辨率,修改它们可以更改默认分辨率。 4. **使用ADB命令临时修改分辨率** 如果仅用于调试或测试,可以通过ADB命令临时更改屏幕分辨率: ```bash adb shell wm size 1080x1920 ``` 该命令会立即生效,但重启后会恢复为默认值。此方法适用于不需要永久更改的场景[^1]。 5. **注意事项** 修改默认分辨率可能会影响系统的显示效果和兼容性,特别是在使用第三方应用时。此外,某些修改可能需要重新编译整个系统镜像并刷写到设备上。因此,在进行修改前,建议备份原始配置,并充分测试新设置的效果。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值