如何添加系统级item至Android 9.0 设置

本文介绍了如何将自定义的Mimo项添加到Android 9.0的系统设置中,包括修改Settings的AndroidManifest.xml,创建Activity或Fragment,并详细说明了将MiMo作为一个Activity和Fragment加入设置菜单的步骤。最后提到了重新编译源代码并替换Settings.apk以预览更改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Settings的AndroidManifest.xml

     Settings也是一个apk,有自己的layout和activity。该layout文件决定了Settings的菜单分级显示,位于/packages/apps/Settings/AndroidManifest.xml,上部分源代码

... ...

<activity
            android:name="Settings$VpnSettingsActivity"
            android:label="@string/vpn_settings_title"
            android:icon="@drawable/ic_settings_wireless"
            android:taskAffinity="com.android.settings"
            android:parentActivityName="Settings">
            <intent-filter android:priority="1">
                <action android:name="android.settings.VPN_SETTINGS" />
                <action android:name="android.net.vpn.SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="com.android.settings.SHORTCUT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.vpn2.VpnSettings" />
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>

... ...

     例如,我们需要在Settings里面加一个item项为Mimo。就有两种选择,设置为Activity、设置为Fragment。Fragment作为更简洁灵活的UI被广泛应用于大屏Android Pad中。接下来介绍分别如何以普通Activity身份加入item,如何以Fragment class身份加入item。

2. Activity作为item加入设置

<activity android:name="MiMo"
                android:label="@string/app_name"
                android:icon="@mipmap/ic_mimo"                                          //需要自行把ic_mimo.png加入/res/mipmap/
                >
            <intent-filter android:priority="1">
                <action android:name="com.android.settings.MIMO" />
                <action android:name="android.settings.MIMO" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="com.android.settings.SHORTCUT" />
            </intent-filter>
            <intent-filter android:priority="9">
                <action android:name="com.android.settings.action.SETTINGS" />
            </intent-filter>
            <meta-data android:name="com.android.settings.category"
                android:value="com.android.settings.category.ia.homepage" />
            <meta-data android:name="com.android.settings.ACTIVITY_ACTION"                          //表明是Activity插入
                android:value="com.android.settings.MiMo" />
            
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>

      接下来,需要定义MiMo这个Activity,把MiMo.java放在/packages/apps/Settings/src目录下。例如

package com.android.settings

public class MiMo extends AppCompatActivity{ ... }

 

3.添加Fragment至设置

   我把MiMo作为Fragment插入设置菜单中

        <activity
            android:name="Settings$MiMoActivity"                                            //属于Settings目录下的MiMoActivity
            android:label="@string/mimo_settings_title"                                     //在/packages/apps/Settings/res/values/string.xml
            android:icon="@mipmap/ic_mimo"                                                   //在/res/mipmap目录下添加ic_mimo.png
            android:taskAffinity="com.android.settings"
            android:parentActivityName="Settings">
            <intent-filter android:priority="1">                                       //决定了显示的优先级,优先级相同的Settings以首字母排序
                <action android:name="android.settings.MIMO" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="com.android.settings.SHORTCUT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.MiMo" />          

            <meta-data android:name="com.android.settings.category"
                android:value="com.android.settings.category.ia.homepage" />                         //决定了显示菜单级别
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>

      在Settings.java (packages/apps/Settings/src)中,添加MiMoActivity定义

public static class MiMoActivity extends SettingsActivity { }

      在SettingsGateway.java (packages/apps/Settings/src/com/android/settings/core/gateway),添加

public static final String[] ENTRY_FRAGMENTS = {
            MiMo.class.getName(),

             ... ...

}

public static final String[] SETTINGS_FOR_RESTRICTED = {
            Settings.MiMoActivity.class.getName(),

           ... ...

}

     然后需要你自己实现MiMo啦,步骤与2的最后一步相同。

    最最重要的事情!你需要重新make源代码(目前都是用Android.bp来代替makefile,其实本质差不多)。make完以后你也不用重新烧写所有的img文件,然后获取root权限。你只需要替换system/priv-app/Settings/Settings.apk这个即可,然后reboot就可以预览你添加新item的Settings菜单了。

 

     如有任何问题和疑问,欢迎大家关注我的微信公众号:

                                               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值