当前位置: 首页 > article >正文

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代码&#xff1a;2、有线网ip获取代码&#xff1a;3、AndroidManifest.xml定义有线网的Activity4、修改后界面&#xff1a; 三、其他1、有线网…...

正则入门到精通

​ 一、正则表达式入门​ 正则表达式本质上是一串字符序列&#xff0c;用于定义一个文本模式。通过这个模式&#xff0c;我们可以指定要匹配的文本特征。例如&#xff0c;如果你想匹配一个以 “abc” 开头的字符串&#xff0c;正则表达式可以写作 “^abc”&#xff0c;其中 …...

微信小程序基于Canvas实现头像图片裁剪(上)

序言 嘿&#xff0c;打工人混迹职场这么久&#xff0c;图片处理肯定都没少碰。不过咱说实话&#xff0c;大部分时候都是直接 “抄近道”&#xff0c;用现成的三方组件&#x1f60f;。就像我&#xff0c;主打一个会用工具&#xff0c;毕竟善用工具可是咱人类的 “超能力”&…...

Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)

一、Logback 在 Spring Boot 中&#xff0c;日志框架默认使用的是 Logback&#xff0c;Spring Boot 提供了对日志配置的简化 Spring Boot 默认会将日志输出到控制台&#xff0c;并且日志级别为 INFO 可以在 application.yaml 或 application.properties 文件中进行日志配置 …...

基于VMware的Cent OS Stream 8安装与配置及远程连接软件的介绍

1.VMware Workstation 简介&#xff1a; VMware Workstation&#xff08;中文名“威睿工作站”&#xff09;是一款功能强大的桌面虚拟计算机软件&#xff0c;提供用户可在单一的桌面上同时运行不同的操作系统&#xff0c;和进行开发、测试 、部署新的应用程序的最佳解决方案。…...

Ubuntu环境基于Ollama部署DeepSeek+Open-Webui实现本地部署大模型-无脑部署

Ollama介绍 Ollama是一款简单好用的模型部署工具,不仅可以部署DeepSeek,市面上开源模型大部分都可以一键部署,这里以DeepSeek为例 官网 DeepSeek 版本硬件要求 安装Ollama 环境 sudo apt update sudo apt install curl sudo apt install lsof1.命令一键安装 在官网点击…...

goto在Java中的用法

说明&#xff1a;goto 在一些编程语言&#xff08;如C语言&#xff09;中&#xff0c;是用来表示跳转的&#xff0c;即代码执行到此处跳转到对应位置继续执行。 举例 举个例子&#xff0c;如下&#xff0c;是一个双层嵌套循环。现在我需要代码在内层循环符合某条件时跳出双层…...

Vue3+Vite+TypeScript+Element Plus开发-03.主页设计与router配置

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 文章目录 目录 系列文档目录 文章目录 前言 一、主页设计 二、配置代替别名 三、配置router 四、运行效果 五、参考文献 前言 本文将重点介绍如何使用…...

linux gcc

一、常用编译选项 ​基本编译 gcc [input].c -o [output] ​示例&#xff1a; gcc hello.c -o hello # 将 hello.c 编译为可执行文件 hello ./hello # 运行程序 ​分步编译 预处理&#xff1a;-E&#xff08;生成 .i 文件&#xff09; gcc -E hello.c -o hello…...

无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?

近三年&#xff0c;全球超过58%的网站采用无限滚动设计&#xff08;数据来源&#xff1a;PageTraffic 2023&#xff09; 谷歌官方数据显示&#xff0c;动态加载内容的索引失败率高达73%&#xff08;Google Webmaster Report 2022&#xff09;&#xff0c;而采用纯无限滚动的页…...

出现次数超过一半的数(信息学奥赛一本通-1186)

【题目描述】 给出一个含有n&#xff08;0 < n < 1000&#xff09;个整数的数组&#xff0c;请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。 【输入】 第一行包含一个整数n&#xff0c;表示数组大小&#xff1b; 第二行包含n个整数&#xff0c;分别是数组…...

Git相关笔记1 - 本地文件上传远程仓库

Git相关笔记 目录 Git相关笔记Git上传相关文件第一步创建一个仓库&#xff1a;第二步本地创建空文件夹&#xff1a;第三步开始在gitbush上传文件&#xff1a;解决外网网络连接的问题&#xff1a;中文文件的编码问题&#xff1a;参考资料 Git上传相关文件 第一步创建一个仓库&a…...

Linux_4

开始学习ssh工具 在做开发的时候,肯定不止一台服务器,那么假设每台服务器都是Linux服务器,要在服务器上操作就需要登入终端,即Terminal。ssh的作用就是可以通过一个服务器登陆上其他的服务器。 登陆到哪个服务器看到的就是哪个服务器的终端terminal。 ssh登陆 ssh user@…...

如何计算财富自由所需要的价格?

写在前面&#xff1a;​【财富自由计算器】已上线&#xff0c;快算算财富自由要多少​ 多少钱&#xff0c;才能实现你的财富梦想&#xff1f; 需要多少&#xff0c;才能实现财务安全、财务独立&#xff0c;甚至财务自由&#xff1f; 看到结尾&#xff0c;你会很清楚地看到&…...

thinkphp每条一级栏目中可自定义添加多条二级栏目,每条二级栏目包含多个字段信息

小程序客户端需要展示团购详情这种结构的内容,后台会新增多条套餐,每条套餐可以新增多条菜品信息,每条菜品信息包含菜品名称,价格,份数等字段信息,类似于购物网的商品多规格属性,数据表中以json类型存储,手写了一个后台添加和编辑的demo 添加页面 编辑页面(json数据…...

Perl语言的文件系统

Perl语言中的文件系统操作 引言 在软件开发中&#xff0c;文件系统操作是一个不可或缺的部分。无论是简单的文件读取、写入&#xff0c;还是复杂的文件管理&#xff0c;合理的文件系统操作都能极大提升程序的效率和可维护性。Perl语言是一种强大的文本处理语言&#xff0c;凭…...

深入解析ARM与RISC-V架构的Bring-up核心流程

深入解析ARM与RISC-V架构的Bring-up核心流程 作者&#xff1a;嵌入式架构探索者 | 2023年10月 引言 在嵌入式开发中&#xff0c;处理器的Bring-up&#xff08;启动初始化&#xff09;是系统运行的第一道门槛。ARM和RISC-V作为两大主流架构&#xff0c;其Bring-up流程既有共性…...

关于UDP端口扫描概述

尽管互联网上大多数流行服务都基于 TCP 协议运行&#xff0c;但 UDP 服务也广泛部署。DNS、SNMP 和 DHCP&#xff08;注册端口 53、161/162 和 67/68&#xff09;是最常见的服务之一。 由于 UDP 扫描通常比 TCP 扫描更慢、更困难&#xff0c;一些安全审计人员可能会忽略这些端…...

C语言的操作系统

C语言的操作系统 引言 操作系统是一种系统软件&#xff0c;它管理计算机硬件和软件资源&#xff0c;并为计算机程序提供公共服务。在现代计算机科学中&#xff0c;操作系统是不可或缺的组成部分&#xff0c;而C语言则是实现高效操作系统的主要编程语言之一。本文将探讨C语言在…...

洛谷题单3-P5725 【深基4.习8】求三角形-python-流程图重构

题目描述 模仿例题&#xff0c;打印出不同方向的正方形&#xff0c;然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模&#xff0c;不超过 9 9 9。 输出格式 输出矩形和正方形 输入输出样例 输入 4输出 01020304 05060708 09101112 13141516010203040506 …...

Lettuce与Springboot集成使用

一、Lettuce核心优势与Spring Boot集成背景 Lettuce特性 基于Netty的非阻塞I/O模型&#xff0c;支持同步/异步/响应式编程线程安全&#xff1a;共享单连接实现多线程并发操作&#xff0c;性能衰减低原生支持Redis集群、哨兵、主从架构&#xff0c;自动重连机制保障高可用Spring…...

C# 类库生成后自动复制到指定目录

C# 类库生成后自动复制到指定目录 在C#中,当你开发了一个类库项目(通常是.NET Core或.NET Framework项目),你可能会希望在构建(Build)完成后自动将生成的DLL文件复制到指定的目录。有几种方法可以实现这个需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…...

《系统分析师-基础篇-1-6章总结》

第1章 绪论 系统分析师角色 职责&#xff1a;需求分析、系统设计、项目管理、技术协调。 能力要求&#xff1a;技术深度&#xff08;架构设计、开发方法&#xff09; 业务理解&#xff08;企业流程、行业知识&#xff09; 沟通能力。 系统开发生命周期 传统模型&#xf…...

一个完整的 HTTP/HTTPS 请求流程

HTTP 一个完整的 HTTP 请求流程可以分为以下几个步骤&#xff1a; 1. DNS 解析 当客户端&#xff08;通常是浏览器&#xff09;输入 URL&#xff08;例如 https://www.example.com&#xff09;时&#xff0c;它首先需要解析出对应的 IP 地址。这个过程涉及 DNS&#xff08;域…...

go游戏后端开发25:红中麻将规则介绍

一、游戏基础规则介绍 在开发红中麻将游戏之前&#xff0c;我们需要先了解其基础规则。红中麻将的牌面由 a、b、c、d 四种花色组成&#xff0c;其中 a、b、c 分别代表万、条、筒&#xff0c;每种花色都有 1 - 9 的九种牌&#xff0c;每种牌各有四张&#xff0c;总计 36 张 4 …...

【YOLO系列(V5-V12)通用数据集-电梯内电动车检测数据集】

YOLO格式的电梯内电动车检测数据集&#xff0c;适用于YOLOv5-v11所有版本&#xff0c;可以用于本科毕设、发paper、做课设等等&#xff0c;有需要的在这里获取&#xff1a; 电梯内电动车检测数据集 数据集专栏地址&#xff1a;https://blog.csdn.net/qq_41304809/category_1290…...

Python每日一题(15)

Python每日一题2025.4.4 一、题目题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 二、分析三、源代码四、deepseek 一、题目 题目描述 您需要写一种数据结构&#xff0c;来维护一些数&#xff08;都是绝对值 1 0 9 10^9 109 以内的数&#xff09;的集合&#xff0c…...

算法题(114):矩阵距离

审题&#xff1a; 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路&#xff1a; 方法一&#xff1a;多源bfs 分析曼哈顿距离&#xff1a; 求法1&#xff1a;公式法&#xff0c;带入题目公式&#xff0c;利用|x1-x2||y1-y2|求出 求法2&#xff1a;曼哈顿距离就是最短距离 本…...

0102-web架构网站搭建-基础入门-网络安全

文章目录 1. 常规2 站库分离3 前后端分离4 集成环境5 docker6 分配站结语 1. 常规 结构&#xff1a;源码数据都在同服务器 影响&#xff1a;无&#xff0c;常规安全测试手法 2 站库分离 结构&#xff1a;源码和数据库不在同服务器 存储&#xff1a;其他服务器上数据库或者…...

Linux系统编程:进程管理、内存对比与树莓派应用

一、认识进程和线程&#xff0c;在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 ​​进程​​&#xff1a;操作系统分配资源&#xff08;如内存、CPU时间片&#xff09;的基本单位。每个进程有独立的内存空间&#xff0c;进程间通信需要较复杂的机制…...