【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### 输…...
突发流鼻血+鼻塞+严重嘴唇溃疡+熬夜+易怒——感觉到了世界末日,到底为何,我该何去何从?
突发流鼻血+鼻塞+严重嘴唇溃疡+熬夜+易怒——感觉到了世界末日,到底为何,我该何去何从? 你目前的症状(流鼻血、鼻塞、严重口腔溃疡、情绪易怒)与长期熬夜密切相关,这些是身体发出的明确警告信号,提示你正处于生理与心理双重透支状态。但请放心,这并非“世界末日”…...
Newton入门到精通:10个项目实战案例带你掌握核心技能
Newton入门到精通:10个项目实战案例带你掌握核心技能 【免费下载链接】newton An open-source, GPU-accelerated physics simulation engine built upon NVIDIA Warp, specifically targeting roboticists and simulation researchers. 项目地址: https://gitcode…...
从零开始玩转CH32V307评估板:MounRiver Studio环境搭建到点灯实战(含固件下载避坑)
国产RISC-V评估板CH32V307全流程开发指南:从环境搭建到LED控制实战 第一次拿到CH32V307评估板时,我盯着板载的WCH-Link调试器和密密麻麻的接口,既兴奋又忐忑。作为国产RISC-V阵营的新秀,沁恒微的这款MCU以其出色的性价比和丰富的外…...
生存数据分析中的缺失值处理与因果推断实战
1. 生存数据分析的核心挑战与缺失值问题 生存数据在医学研究、工业设备维护、金融风险管理等领域无处不在,但这类数据有个让人头疼的特点——几乎总是带着各种缺失值。想象一下医院随访记录:患者可能中途失访,检测设备偶尔故障,或…...
如何快速安装Windows包管理器:3种简单方法一键部署Winget
如何快速安装Windows包管理器:3种简单方法一键部署Winget 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/…...
容器技术入门与 Docker 环境部署
一、容器与 Docker 核心认知1. 什么是容器容器是操作系统层面的轻量级虚拟化,把应用、依赖、配置打包成独立运行单元,共享宿主机内核,实现环境一致性与资源隔离。2. 为什么用 Docker启动秒级,性能接近原生环境一次打包,…...
Skill Hub:基于MCP协议的LLM技能动态路由与按需加载架构解析
1. 项目概述:一个彻底改变LLM技能调用方式的“技能路由器”如果你正在使用Claude、Cursor或者任何支持MCP协议的AI开发工具,并且为如何高效管理海量技能(Skill)而头疼,那么Skill Hub这个项目,你绝对不能错过…...
ChanlunX:通达信缠论分析的终极可视化解决方案
ChanlunX:通达信缠论分析的终极可视化解决方案 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经面对复杂的K线图,试图手动绘制缠论的笔、段和中枢,却感到力不…...
AgentBench:多环境基准测试实战,全面评估LLM智能体能力
1. 项目概述:AgentBench,一个重新定义LLM智能体能力的基准测试 如果你最近在关注大语言模型(LLM)如何从“聊天机器人”进化为能执行复杂任务的“智能体”,那么你一定听说过各种炫酷的演示:让AI帮你订机票、…...
