Android Settings 有线网设置界面优化
Android Settings 有线网设置界面优化
文章目录
- Android Settings 有线网设置界面优化
- 一、前言
- 二、简单修改
- 1、修改的EthernetSettings代码:
- 2、有线网ip获取代码:
- 3、AndroidManifest.xml定义有线网的Activity
- 4、修改后界面:
- 三、其他
- 1、有线网设置界面优化小结
- 2、Android 拉起开发者设置界面命令和代码实现
- 3、Android13 有线网开关研究
- 4、Android14 Settings应用添加有线网开关条目实现
- 5、Android 获取ip地址多种方式介绍
一、前言
快清明放假了,说点简单的,有线网设置,估计只对部分系统开发的人有点用。
Android 原生设置应用好像大部分方案都是没有显示有线网设置界面的;
从接触的方案看只有rk方案的原生设置应用显示了有线网设置界面,和热点设置界面是同级目录显示的。
如下图所示:

但是这个有线网设置界面又是存在点问题的:
有线网DHCP自动获取模式下,是无法获取到ip的;
只有在设置了静态ip的模式下,才显示ip和其他信息。
如下图,所示:

难道是RK从谷歌的一个调试分支下载的Settings源码?
但是不应该啊,谷歌不会犯这么低级的错误吧,并且Ethernet的相关字符串都没有国际化,只有英文的;
并且查看里面获取有线网ip的地方居然使用的是反射,系统应用按道理是可以调用framework的隐藏方法的!
所以我大胆的猜测:这个有线网设置界面是RK自己添加的,并且是很久的代码了,
一直挪用下来,未重新适配,看了她Android15提供的代码也是一样的问题。
这个也是一个小bug,本文只简单修改一下。
二、简单修改
1、修改的EthernetSettings代码:
Settings\src\com\android\settings\ethernet\EthernetSettings.java
public class EthernetSettings extends SettingsPreferenceFragment ...{private static final String TAG = "EthernetSettings";private void refreshUI() {Iterator<String> iterator = mEthInfoList.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next();String prefix = key + PREFIX_SPLIT;EthInfo info = mEthInfoList.get(key);log("info = " + info);if (info != null) {
- setStringSummary(prefix + KEY_ETH_IP_ADDRESS, info.getIpAddress());
+ IpConfiguration ipConfiguration = Reflect_getConfiguration("eth0");
+ IpAssignment mode = ipConfiguration.getIpAssignment();
+ if (mode == IpAssignment.DHCP || mode == IpAssignment.UNASSIGNED) {
+ log("tyty DHCP ========= ");
+ setStringSummary(prefix + KEY_ETH_IP_ADDRESS, getEthernetIpAddress());
+ }else{
+ setStringSummary(prefix + KEY_ETH_IP_ADDRESS, info.getIpAddress());}
上面只是把显示ip地址那行替换成了getEthernetIpAddress()方法获取的有线网ip地址就行;
2、有线网ip获取代码:
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.LinkProperties;private ConnectivityManager mConnectivityManager;mConnectivityManager = (ConnectivityManager) getActivity().getSystemService(getActivity().CONNECTIVITY_SERVICE);public String getEthernetIpAddress() {Log.d(TAG,"");final Network network = getFirstEthernet();if (network == null) {return "";}final LinkProperties linkProperties = mConnectivityManager.getLinkProperties(network);if (linkProperties != null) {for (LinkAddress linkAddress : linkProperties.getLinkAddresses()) {InetAddress inetAddress = linkAddress.getAddress();if (inetAddress instanceof Inet4Address) {return inetAddress.getHostAddress();}}}return "";}public Network getFirstEthernet() {final Network[] networks = mConnectivityManager.getAllNetworks();for (final Network network : networks) {NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {return network;}}return null;}
3、AndroidManifest.xml定义有线网的Activity
<activityandroid:name="Settings$EthernetSettingsActivity"android:label="@string/ethernet_settings_title"android:icon="@drawable/ic_settings_wireless"android:taskAffinity=""android:exported="true"><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.ethernet.EthernetSettings" /></activity><!-- Keep compatibility with old shortcuts. --><activity-aliasandroid:name=".EthernetSettings"android:label="@string/ethernet_settings"android:clearTaskOnLaunch="true"android:targetActivity="Settings$EthernetSettingsActivity"android:exported="true"><meta-data android:name="com.android.settings.FRAGMENT_CLASS"android:value="com.android.settings.EthernetSettings" /></activity-alias>
从上面代码可以看到可以使用adb拉起有线网设置界面命令:
am start -n com.android.settings/.Settings\$EthernetSettingsActivity
am start -n com.android.settings/.EthernetSettings //有点bug,不一定能打开
如果无法使用上面命令打开有线网设置,那么设置应用应该就是没有有线网设置界面的。
比如我开发的:MTK和AML方案的原生设置代码就没有有线网设置界面。
4、修改后界面:
没有大改,只显示了ip地址,其实动态获取有线网的情况,网关,dns那些都应该隐藏的。

后续有时时间再介绍一下有线网修改配置信息最新的api(Android13增加)吧。
三、其他
1、有线网设置界面优化小结
目前是rk方案存在的问题,其实没啥需求可以隐藏这个条目的;
如果要显示ip就按照上面的修改一下吧。
2、Android 拉起开发者设置界面命令和代码实现
有些情况,原生设置是隐藏的或者不想打开原生设置,如何直接拉起开发者选项呢?
是否有命令或者代码可以实现呢?
下面简单介绍一下:
https://blog.csdn.net/wenzhi20102321/article/details/146985730
3、Android13 有线网开关研究
Android13 的api 提供了有线网开关 EthernetManager.setEthernetEnabled(boolean),
Android9 如果要设置有线网开关,需要自己实现。
https://blog.csdn.net/wenzhi20102321/article/details/131871354
4、Android14 Settings应用添加有线网开关条目实现
Android 原生Settings应用没有有线网开关条目;
Tv平台一般是有有线网连接的,如果没有有线网控制条目是不太方便的;
如果要在原生Settings添加有线网开关和显示有线网ip,要如何实现呢?
本文简单实现一下,有需要的可以参考修改:
https://blog.csdn.net/wenzhi20102321/article/details/146536467
5、Android 获取ip地址多种方式介绍
adb shell 的 ifconfig可以获取当前设备网络节点信息;
这些信息使用Android代码也是可以获取的;
Android 获取网络ip有多种方式,有时候某种方式获取失败的情况下;
那么就可以换一种获取方式,所有多学习一下获取网络ip相关信息是有用的。
https://blog.csdn.net/wenzhi20102321/article/details/141673195
相关文章:
Android Settings 有线网设置界面优化
Android Settings 有线网设置界面优化 文章目录 Android Settings 有线网设置界面优化一、前言二、简单修改1、修改的EthernetSettings代码:2、有线网ip获取代码:3、AndroidManifest.xml定义有线网的Activity4、修改后界面: 三、其他1、有线网…...
正则入门到精通
一、正则表达式入门 正则表达式本质上是一串字符序列,用于定义一个文本模式。通过这个模式,我们可以指定要匹配的文本特征。例如,如果你想匹配一个以 “abc” 开头的字符串,正则表达式可以写作 “^abc”,其中 …...
微信小程序基于Canvas实现头像图片裁剪(上)
序言 嘿,打工人混迹职场这么久,图片处理肯定都没少碰。不过咱说实话,大部分时候都是直接 “抄近道”,用现成的三方组件😏。就像我,主打一个会用工具,毕竟善用工具可是咱人类的 “超能力”&…...
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
一、Logback 在 Spring Boot 中,日志框架默认使用的是 Logback,Spring Boot 提供了对日志配置的简化 Spring Boot 默认会将日志输出到控制台,并且日志级别为 INFO 可以在 application.yaml 或 application.properties 文件中进行日志配置 …...
基于VMware的Cent OS Stream 8安装与配置及远程连接软件的介绍
1.VMware Workstation 简介: VMware Workstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。…...
Ubuntu环境基于Ollama部署DeepSeek+Open-Webui实现本地部署大模型-无脑部署
Ollama介绍 Ollama是一款简单好用的模型部署工具,不仅可以部署DeepSeek,市面上开源模型大部分都可以一键部署,这里以DeepSeek为例 官网 DeepSeek 版本硬件要求 安装Ollama 环境 sudo apt update sudo apt install curl sudo apt install lsof1.命令一键安装 在官网点击…...
goto在Java中的用法
说明:goto 在一些编程语言(如C语言)中,是用来表示跳转的,即代码执行到此处跳转到对应位置继续执行。 举例 举个例子,如下,是一个双层嵌套循环。现在我需要代码在内层循环符合某条件时跳出双层…...
Vue3+Vite+TypeScript+Element Plus开发-03.主页设计与router配置
系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 文章目录 目录 系列文档目录 文章目录 前言 一、主页设计 二、配置代替别名 三、配置router 四、运行效果 五、参考文献 前言 本文将重点介绍如何使用…...
linux gcc
一、常用编译选项 基本编译 gcc [input].c -o [output] 示例: gcc hello.c -o hello # 将 hello.c 编译为可执行文件 hello ./hello # 运行程序 分步编译 预处理:-E(生成 .i 文件) gcc -E hello.c -o hello…...
无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?
近三年,全球超过58%的网站采用无限滚动设计(数据来源:PageTraffic 2023) 谷歌官方数据显示,动态加载内容的索引失败率高达73%(Google Webmaster Report 2022),而采用纯无限滚动的页…...
出现次数超过一半的数(信息学奥赛一本通-1186)
【题目描述】 给出一个含有n(0 < n < 1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。 【输入】 第一行包含一个整数n,表示数组大小; 第二行包含n个整数,分别是数组…...
Git相关笔记1 - 本地文件上传远程仓库
Git相关笔记 目录 Git相关笔记Git上传相关文件第一步创建一个仓库:第二步本地创建空文件夹:第三步开始在gitbush上传文件:解决外网网络连接的问题:中文文件的编码问题:参考资料 Git上传相关文件 第一步创建一个仓库&a…...
Linux_4
开始学习ssh工具 在做开发的时候,肯定不止一台服务器,那么假设每台服务器都是Linux服务器,要在服务器上操作就需要登入终端,即Terminal。ssh的作用就是可以通过一个服务器登陆上其他的服务器。 登陆到哪个服务器看到的就是哪个服务器的终端terminal。 ssh登陆 ssh user@…...
如何计算财富自由所需要的价格?
写在前面:【财富自由计算器】已上线,快算算财富自由要多少 多少钱,才能实现你的财富梦想? 需要多少,才能实现财务安全、财务独立,甚至财务自由? 看到结尾,你会很清楚地看到&…...
thinkphp每条一级栏目中可自定义添加多条二级栏目,每条二级栏目包含多个字段信息
小程序客户端需要展示团购详情这种结构的内容,后台会新增多条套餐,每条套餐可以新增多条菜品信息,每条菜品信息包含菜品名称,价格,份数等字段信息,类似于购物网的商品多规格属性,数据表中以json类型存储,手写了一个后台添加和编辑的demo 添加页面 编辑页面(json数据…...
Perl语言的文件系统
Perl语言中的文件系统操作 引言 在软件开发中,文件系统操作是一个不可或缺的部分。无论是简单的文件读取、写入,还是复杂的文件管理,合理的文件系统操作都能极大提升程序的效率和可维护性。Perl语言是一种强大的文本处理语言,凭…...
深入解析ARM与RISC-V架构的Bring-up核心流程
深入解析ARM与RISC-V架构的Bring-up核心流程 作者:嵌入式架构探索者 | 2023年10月 引言 在嵌入式开发中,处理器的Bring-up(启动初始化)是系统运行的第一道门槛。ARM和RISC-V作为两大主流架构,其Bring-up流程既有共性…...
关于UDP端口扫描概述
尽管互联网上大多数流行服务都基于 TCP 协议运行,但 UDP 服务也广泛部署。DNS、SNMP 和 DHCP(注册端口 53、161/162 和 67/68)是最常见的服务之一。 由于 UDP 扫描通常比 TCP 扫描更慢、更困难,一些安全审计人员可能会忽略这些端…...
C语言的操作系统
C语言的操作系统 引言 操作系统是一种系统软件,它管理计算机硬件和软件资源,并为计算机程序提供公共服务。在现代计算机科学中,操作系统是不可或缺的组成部分,而C语言则是实现高效操作系统的主要编程语言之一。本文将探讨C语言在…...
洛谷题单3-P5725 【深基4.习8】求三角形-python-流程图重构
题目描述 模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模,不超过 9 9 9。 输出格式 输出矩形和正方形 输入输出样例 输入 4输出 01020304 05060708 09101112 13141516010203040506 …...
Lettuce与Springboot集成使用
一、Lettuce核心优势与Spring Boot集成背景 Lettuce特性 基于Netty的非阻塞I/O模型,支持同步/异步/响应式编程线程安全:共享单连接实现多线程并发操作,性能衰减低原生支持Redis集群、哨兵、主从架构,自动重连机制保障高可用Spring…...
C# 类库生成后自动复制到指定目录
C# 类库生成后自动复制到指定目录 在C#中,当你开发了一个类库项目(通常是.NET Core或.NET Framework项目),你可能会希望在构建(Build)完成后自动将生成的DLL文件复制到指定的目录。有几种方法可以实现这个需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…...
《系统分析师-基础篇-1-6章总结》
第1章 绪论 系统分析师角色 职责:需求分析、系统设计、项目管理、技术协调。 能力要求:技术深度(架构设计、开发方法) 业务理解(企业流程、行业知识) 沟通能力。 系统开发生命周期 传统模型…...
一个完整的 HTTP/HTTPS 请求流程
HTTP 一个完整的 HTTP 请求流程可以分为以下几个步骤: 1. DNS 解析 当客户端(通常是浏览器)输入 URL(例如 https://www.example.com)时,它首先需要解析出对应的 IP 地址。这个过程涉及 DNS(域…...
go游戏后端开发25:红中麻将规则介绍
一、游戏基础规则介绍 在开发红中麻将游戏之前,我们需要先了解其基础规则。红中麻将的牌面由 a、b、c、d 四种花色组成,其中 a、b、c 分别代表万、条、筒,每种花色都有 1 - 9 的九种牌,每种牌各有四张,总计 36 张 4 …...
【YOLO系列(V5-V12)通用数据集-电梯内电动车检测数据集】
YOLO格式的电梯内电动车检测数据集,适用于YOLOv5-v11所有版本,可以用于本科毕设、发paper、做课设等等,有需要的在这里获取: 电梯内电动车检测数据集 数据集专栏地址:https://blog.csdn.net/qq_41304809/category_1290…...
Python每日一题(15)
Python每日一题2025.4.4 一、题目题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 二、分析三、源代码四、deepseek 一、题目 题目描述 您需要写一种数据结构,来维护一些数(都是绝对值 1 0 9 10^9 109 以内的数)的集合,…...
算法题(114):矩阵距离
审题: 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路: 方法一:多源bfs 分析曼哈顿距离: 求法1:公式法,带入题目公式,利用|x1-x2||y1-y2|求出 求法2:曼哈顿距离就是最短距离 本…...
0102-web架构网站搭建-基础入门-网络安全
文章目录 1. 常规2 站库分离3 前后端分离4 集成环境5 docker6 分配站结语 1. 常规 结构:源码数据都在同服务器 影响:无,常规安全测试手法 2 站库分离 结构:源码和数据库不在同服务器 存储:其他服务器上数据库或者…...
Linux系统编程:进程管理、内存对比与树莓派应用
一、认识进程和线程,在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 进程:操作系统分配资源(如内存、CPU时间片)的基本单位。每个进程有独立的内存空间,进程间通信需要较复杂的机制…...
