Android N原生Settings应用添加自定义的一级菜单项
被动方式
被动方式:修改被调用应用的AndroidManifest.xml
根据菜单项
Google
的启发,因此猜想是否可以通过这种方式添加选项。
源码追踪
追踪:
Settings\src\com\android\settings\SettingsActivity.java
追踪父类:SettingsLib\src\com\android\settingslib\drawer\SettingsDrawerActivity.java
最终定位:
SettingsLib\src\com\android\settingslib\drawer\TileUtils.java
,因此根据源码,反推出原生Settings通过遍历AndroidManifest.xml文件,添加符合要求的菜单项
修改AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<activity
android:name=".app.AppsActivity"
android:launchMode="singleTask">
<!-- 核心,特别重要,必须添加:用于Settings过滤出菜单项Category -->
<intent-filter>
<action android:name="com.android.settings.MANUFACTURER_APPLICATION_SETTING" />
</intent-filter>
<!-- 设置显示的title -->
<meta-data android:name="com.android.settings.title" android:resource="@string/app_name" />
<!-- 设置显示的小标题 -->
<meta-data android:name="com.android.settings.summary" android:resource="@string/app_name" />
<!-- 设置显示的图标 -->
<meta-data android:name="com.android.settings.icon" android:resource="@drawable/load_err" />
<!-- 核心,特别重要,必须添加:表示添加一个菜单选项,用于Settings分类,归属于“个人”的选项下,也可以是其他的:系统等等 -->
<meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.personal"/>
</activity>验证猜想
通过反编译Google的apk发现,里面的AndroidManifest里面行数L2536-L2543的代码与上面修改的代码是一样的,因此,猜想是正确的。
拓展
菜单项的所属分类
修改value值,可以选择分类:personal、system,其他的分类未验证1
2
3<meta-data android:name="com.android.settings.category"
// android:value="com.android.settings.category.system
android:value="com.android.settings.category.personal"/>菜单项的顺序
修改优先级,可以调整顺序,等级越高的,在上面1
2<intent-filter android:priority="4">
</intent-filter>
注意
通过验证:需要预置apk才有效,安装的方式是没有作用
主动方式
- 主动的方式:通过修改原生Settings的代码,也可以添加一级、二级菜单项,但是这种方式比较繁琐复杂。如果只是简单在原生Settings上添加一级菜单项,建议使用被动方式。
感谢
非常感谢 迷途羔羊 的帮助😁😁