详解Android 7.0 Settings 加载选项
发布时间 - 2026-01-10 23:02:52 点击率:次先写在前面,这说的Settings加载选项是指Settings这个应用显示在主界面的选项,这个修改需要对系统源码进行修改。

Android 7.0 Settings顶部多了一个建议选项,多了个侧边栏,操作更加便捷了。
原生7.0主界面 原生7.0侧边栏
Android 6.0
之前做Android 6.0开发的,都会了解到6.0的Settings加载选项是通过加载dashboard_categories.xml,获取需要显示的选项,并且在SettingsActivity中也进行判断是否要显示,所以在6.0上添加一个选项是比较简单的,直接在dashboard_categories.xml添加icon、title、summary,也可以添加目标fragment和Intent,这样就可以顺利跳转到对应的界面了。但是在7.0上,google对Settings进行了重构。
Android 7.0
7.0的Settings的选项不再从dashboard_categories.xml中加载选项列表,而是通过在Androidmanifest.xml中,配置intent-filter的Action,在通过PackageManager进行指定的Action进行搜索,那么就可以获取到需要显示的选项列表了,并且也需要在代码中进行判断,判断哪些功能需要显示与否。
TileUtils.Java中通过几个Action进行获取系统中对应的activity,如Settings中的几个
private static final String SETTINGS_ACTION ="com.android.settings.action.SETTINGS"; private static final String OPERATOR_SETTINGS ="com.android.settings.OPERATOR_APPLICATION_SETTING"; private static final String OPERATOR_DEFAULT_CATEGORY ="com.android.settings.category.wireless"; private static final String MANUFACTURER_SETTINGS ="com.android.settings.MANUFACTURER_APPLICATION_SETTING"; private static final String MANUFACTURER_DEFAULT_CATEGORY ="com.android.settings.category.device";
通过PackageManager进行搜索,获取到这一系列的activity信息,
PackageManager pm = context.getPackageManager(); List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent,PackageManager.GET_META_DATA, user.getIdentifier());
并且在AndroidManifest.xml通过meta-data配置了icon、title、summary,那这就有Settings中显示的图标、标题和说明。还有在Settings中显示的分类、目标Fragment。
Settings 的AndroidManifest.xml 下面那代码是Settings->about phone的Activity配置。
<activity android:name="Settings$DeviceInfoSettingsActivity"
android:theme="@style/Theme.SubSettingsDialogWhenLarge"
android:label="@string/device_info_settings"
android:icon="@drawable/ic_settings_about"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings">
<intent-filter android:priority="1">
<action android:name="android.settings.DEVICE_INFO_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" />
</intent-filter>
<intent-filter android:priority="-1">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.system" />
<meta-data android:name="com.android.settings.title"
android:resource="@string/about_settings" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.DeviceInfoSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
Settings显示各选项的思路比较简单,所以直接在Settings里面添加功能选项还是比较简单的。
添加第三方apk到Settings选项中
如果需要Settings中添加打包好的apk,需要三个步骤。
1. 添加action。
可以被PackageManager搜索到的activity,搜索到后添加到Settings的选项列表中
复制代码 代码如下:
private static final String EXTRA_SETTINGS_ACTION ="com.android.settings.action.EXTRA_SETTINGS";
1、添加显示的选项信息。
在该apk的AndroidManifest.xml对应的启动activity中添加以下meta-data。最好是有该apk提供公司的技术支持,不然有混淆的代码就比较难进行更改、回编译了。
/**
* The key used to get the category from metadata of activities of action
* {@link #EXTRA_SETTINGS_ACTION}
* The value must be one of:
* <li>com.android.settings.category.wireless</li>
* <li>com.android.settings.category.device</li>
* <li>com.android.settings.category.personal</li>
* <li>com.android.settings.category.system</li>
*/
private static final String EXTRA_CATEGORY_KEY = "com.android.settings.category";
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the icon that should be displayed for the preference.
*/
public static final String META_DATA_PREFERENCE_ICON = "com.android.settings.icon";
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the title that should be displayed for the preference.
*/
public static final String META_DATA_PREFERENCE_TITLE = "com.android.settings.title";
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the summary text that should be displayed for the preference.
*/
public static final String META_DATA_PREFERENCE_SUMMARY = "com.android.settings.summary";
在TileUtils.java的白名单中添加对应的包名。
这个也是Android考虑到的一些安全上的问题,没有添加到白名单上面的包名,就不会显示出来。
/// Extra package white list for add item to Settings @{
private static final String[] EXTRA_PACKAGE_WHITE_LIST = {};
/// @}
最后就是全编,刷机验证了。
相比android6.0,在7.0上添加功能选项显得更简单了,只需要写好了功能,在Settings的AndroidManifest.xml中添加必要的参数,或者是在独立的apk中AndroidManifest.xml中配置必要的参数,再在TileUtils.java中添加包名就好了。需要修改的地方更少了,并且Google将很方方法放到了com.android.settinglibs里,精简了一部分代码。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 7.0
# settings
# Android Settings 跳转流程方法详解
# Android跳转系统设置Settings的各个界面详解
# 分析Android 11.0Settings源码之主界面加载
# Android Settings 按住电源按钮的操作方法
# 加载
# 几个
# 就可以
# 这一
# 是在
# 好了
# 是有
# 是指
# 只需
# 要在
# 这就
# 少了
# 考虑到
# 中也
# 第三方
# 在前面
# 就比
# 大家多多
# 要写
# 进行了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用模型观察者?(Observer代码示例)
昵图网官网入口 昵图网素材平台官方入口
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
PHP正则匹配日期和时间(时间戳转换)的实例代码
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
如何确认建站备案号应放置的具体位置?
如何为不同团队 ID 动态生成多个独立按钮
,网页ppt怎么弄成自己的ppt?
如何在万网自助建站平台快速创建网站?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
详解CentOS6.5 安装 MySQL5.1.71的方法
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何在云虚拟主机上快速搭建个人网站?
Android使用GridView实现日历的简单功能
JS中对数组元素进行增删改移的方法总结
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel如何使用Livewire构建动态组件?(入门代码)
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel如何生成URL和重定向?(路由助手函数)
jquery插件bootstrapValidator表单验证详解
详解阿里云nginx服务器多站点的配置
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
大学网站设计制作软件有哪些,如何将网站制作成自己app?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
高端云建站费用究竟需要多少预算?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
如何基于云服务器快速搭建网站及云盘系统?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何在IIS中新建站点并配置端口与物理路径?
如何快速搭建高效WAP手机网站吸引移动用户?
WordPress 子目录安装中正确处理脚本路径的完整指南
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在橙子建站上传落地页?操作指南详解
非常酷的网站设计制作软件,酷培ai教育官方网站?
三星、SK海力士获美批准:可向中国出口芯片制造设备

