【Android11】在内置的Tvsettings的界面中显示以太网Mac地址
【Android11】在内置的Tvsettings的界面中显示以太网Mac地址
- 了解Preference
- 必要信息
- 步骤:
- 1. 在设置页面的xml文件中增加一个Preference ,这是要显示出来的设置项
- 2. 在strings.xml文件中增加我们在第一步新设置的值
- 3. 为新加的设置项增加一个新的XXXPreferenceController.java
- 4. 将我们刚才写好的XXXPreferenceController.java加到设置界面的代码里面去。
- 5. 去Framework的代码里面新加AbstractXXXPreferenceController.java 并在其中实现具体逻辑
了解Preference
安卓设置中的界面基本都是使用Preference来实现的,若对这个不熟悉,修改代码的时候会非常费劲。
这里给两个博客参考:
Android设置之Preference
Android(12)浅析 偏好设置 Preference(一)
必要信息
我这里是基于Android11修改tvsettings中的代码。
在我们默认的Launcher里面右下角的那个设置的app的包名为:com.android.tv.settings
设置app的源代码位置为:vendor/amlogic/common/apps/DroidTvSettings/
Status界面的代码位置为:vendor/amlogic/common/apps/DroidTvSettings/Settings/src/com/android/tv/settings/about/StatusFragment.java
步骤:
1. 在设置页面的xml文件中增加一个Preference ,这是要显示出来的设置项
vendor/amlogic/common/apps/DroidTvSettings/Settings/res/xml/device_info_status.xml
<Preference android:key="eth_mac" android:title="@string/title_eth_mac"android:summary="@string/status_unavailable" android:persistent="false" />
key是此设置项的标识,title是设置项的标题,summary的设置是设置项的摘要也就是下面的小字(在这个示例中是我们的以太网MAC地址,默认值是@string/status_unavailable),persistent不用改都是设置的false(似乎是用于指示该首选项是否应该在用户退出应用程序后保持持久性(即,是否应该在应用重新启动时保留其值))
这里注意android:title的值命名方式要和其他的设置项的命名方式风格统一
2. 在strings.xml文件中增加我们在第一步新设置的值
vendor/amlogic/common/apps/DroidTvSettings/Settings/res/values/strings.xml
<!-- About phone, status item title. The Ethernet MAC address--> <string name="title_eth_mac">Ethernet MAC address</string>
这里注意这个值摆放的位置最好和其他的风格统一,title就放在title附近
3. 为新加的设置项增加一个新的XXXPreferenceController.java
vendor/amlogic/common/apps/DroidTvSettings/Settings/src/com/android/tv/settings/about/EthernetMacPreferenceController.java
这里参考其他设置项的写法,只需要继承相应的AbstractXXXPreferenceController类就好,具体的实现逻辑要在AbstractXXXPreferenceController类中去实现。
4. 将我们刚才写好的XXXPreferenceController.java加到设置界面的代码里面去。
vendor/amlogic/common/apps/DroidTvSettings/Settings/src/com/android/tv/settings/about/StatusFragment.java
@Override protected List<AbstractPreferenceController> onCreatePreferenceControllers(Context context) { final List<AbstractPreferenceController> controllers = new ArrayList<>(11); final Lifecycle lifecycle = getSettingsLifecycle(); // TODO: detect if we have a battery or not controllers.add(new SerialNumberPreferenceController(context)); controllers.add(new UptimePreferenceController(context, lifecycle)); controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); controllers.add(new EthernetMacPreferenceController(context)); controllers.add(new IpAddressPreferenceController(context, lifecycle)); controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); controllers.add(new ImsStatusPreferenceController(context, lifecycle));
5. 去Framework的代码里面新加AbstractXXXPreferenceController.java 并在其中实现具体逻辑
frameworks/base/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractEthernetMacPreferenceController.java
这里实现获取以太网MAC的逻辑是使用SystemProperties.get("ro.boot.mac").toLowerCase();获取并且将其转化为小写以适应其他设置项MAC地址的风格。
这里注意,static final String KEY_XXX 的这个key要和我们第一步设置的key一样。
Properties是什么可以自行去搜索,简单的来说就是存了很多参数的配置文件,在板子运行时可以通过控制台使用getprop命令查看所有的Properties,也可以getprop+具体参数名来搜索具体某一个参数的值。
相关文章:
【Android11】在内置的Tvsettings的界面中显示以太网Mac地址
【Android11】在内置的Tvsettings的界面中显示以太网Mac地址 了解Preference必要信息步骤:1. 在设置页面的xml文件中增加一个Preference ,这是要显示出来的设置项2. 在strings.xml文件中增加我们在第一步新设置的值3. 为新加的设置项增加一个新的XXXPref…...
在Oracle 11g 数据库上设置透明数据加密(TDE)
本文回答2个问题: 11g下简明的TDE设置过程由于11g不支持在线TDE,介绍2中11g下的加密表空间的迁移方法 设置表空间TDE之前 表空间没有加密时,很容易探测到明文数据: create tablespace unsectbs datafile unsectbs.dbf size 10…...
互动直播 之 视频帧原始数据管理
目录 一、视频帧管理 1、存储图片数据的数据结构 1.1)、图片数据首地址...
基于tcp协议及数据库sqlite3的云词典项目
这个小项目是一个网络编程学习过程中一个阶段性检测项目,过程中可以有效检测我们对于服务器客户端搭建的能力,以及一些bug查找能力。项目的一个简单讲解我发在了b站上,没啥心得,多练就好。 https://t.bilibili.com/86524470252640…...
C/C++内存管理(1):C/C++内存分布,C++内存管理方式
一、C/C内存分布 1.1 1.2 二、C内存管理方式 C可以通过操作符new和delete进行动态内存管理。 2.1 new和delete操作内置类型 int main() {int* p1 new int;// 注意区分p2和p3int* p2 new int(10);// 对*p2进行初始化 10int* p3 new int[10];// p3 指向一块40个字节的int类…...
11 redis中分布式锁的实现
单机锁代码 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.con…...
循环链表3
插入函数——插入数据,在链表plsit的pos位置插入val数据元素 位置pos(在无特别说明的情况下)是从0开始计数的 要改变链表结构,就要依赖前驱,每个前驱的next存储着下一个数据结点的地址,也就是依靠前驱的ne…...
如何修改百科内容?百度百科内容怎么修改?
百科词条创建上去是相当不易的,同时修改也是如此,一般情况下,百科词条是不需要修改的,但是很多时候企业或是人物在近期收获了更多成就或是有更多的变动,这个时候就需要补充维护词条了,如何修改百科内容&…...
mysql8.0英文OCP考试第131-140题
Q131.You have upgraded the MySQL binaries from 5.7.28 to 8.0.18 by using an in-place upgrade. Examine the message sequence generated during the first start of MySQL 8.0.18: 。。。[System]。。。/usx/sbin/mysqld (mysqld 8.0.18-commercial) starting as proces…...
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
目录 介绍 案例 通过SQLSTATE指定具体的状态码 通过SQLSTATE的代码简写方式 NOT FOUND 介绍 条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为: DECLARE handler_action HANDLER FOR c…...
信号的处理时机(内核态,用户态,如何/为什么相互转换,内核空间,cpu寄存器),信号的处理流程详细介绍+抽象图解
目录 信号的处理时机 引入 思考 -- 什么时候才能算合适的时候呢? 用户态转为内核态 引入 内核地址空间 引入 思考 -- 进程为什么能切换成内核态呢? 虚拟地址空间 注意点 原理 (总结一下) 为什么如何进入内核态 引入 介绍 底层原理(int 80) cpu的寄存器 用…...
【JavaEE】Spring的创建和使用(保姆级手把手图解)
一、创建一个Spring项目 1.1 创建一个Maven项目 1.2 添加 Spring 框架支持 在pom.xml中添加 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE&…...
MyBatis:关联查询
MyBatis 前言关联查询附懒加载对象为集合时的关联查询 前言 在 MyBatis:配置文件 文章中,最后介绍了可以使用 select 标签的 resultMap 属性实现关联查询,下面简单示例 关联查询 首先,先创建 association_role 和 association_…...
第十二章 控制值的转换
文章目录 第十二章 控制值的转换介绍处理特殊 XML 字符文字和 SOAP 编码格式的转义形式 示例防止泄漏的另一种方法 第十二章 控制值的转换 类和属性参数 ESCAPE CONTENT XMLTIMEZONE DISPLAYLIST VALUELIST XMLDEFAULTVALUE XMLLISTPARAMETER XMLSTREAMMODE 介绍 支…...
SQL并集、交集、差集使用
一、概述 SQL语句实现数据的并集(union)、交集(intersect)、差集(except)。 二、案例 1、stu表 idname1张三2李四3王二 2、并集 union union 运算:表示取并集,例如:…...
【双指针】盛水最多的容器
盛水最多的容器 文章目录 盛水最多的容器题目描述算法原理思路一思路二 代码实现Java代码实现C代码实现 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与…...
win11,引导项管理
1,打开cmd,输入msconfig 2,进入引导选项卡 3,删除不需要的引导项...
YoloV8改进策略:WaveletPool解决小目标的混叠问题,提高小目标的检测精度
文章目录 摘要论文:《抗混叠在微小目标检测中的重要性》1、简介2、相关研究2.1、微小物体检测2.2. 抗锯齿过滤器3、方法3.1. Wavelet Pooling3.2 一致顺序的Wavelet Pooling的WaveCNet3.3、Bottom-Heavy Backbone4、实验4.1、预训练数据集4.2、微小目标检测数据集4.3、抗混叠方…...
JavaScript中的假值对象是什么?
JavaScript是一种非常灵活且强大的编程语言,但有时候它的一些特性可能会让人感到困惑。其中一个常见的问题就是假值对象。在本文中,我们将探讨什么是假值对象,并通过代码示例来解释这个概念。 什么是假值对象? 在JavaScript中&am…...
求二叉树的最大密度(可运行)
最大密度:二叉树节点数值的最大值 如果没有输出结果,一定是建树错误!!!!!!! 我设置输入的是字符型数据,比较的ASCII值。 输入:FBE###CE### 输…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
