android13(T) 以太网设置工具类
13 版本的以太网设置和以前版本有所变动,在 AS 中就能直接调用对应 API
将 build.gradle 版本修改 compileSdkVersion 31, 即可直接调用 EthernetManager 相关,
设置静态等方法可以通过反射调用设置。
以下是核心设置静态和动态参数工具类,界面大家可以自由发挥,
以太网电源开关和你们驱动协商写个节点啥的都ok
import android.content.ContentResolver;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.EthernetManager;
import android.net.IpConfiguration;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.RouteInfo;
import android.net.StaticIpConfiguration;
import android.provider.Settings;
import android.provider.Settings.System;
import android.text.TextUtils;
import android.util.Log;import java.io.FileOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;import static android.content.Context.CONNECTIVITY_SERVICE;public class EthernetUtil {private static final String TAG = "EthernetUtil";public static final String IS_ETHERNET_OPEN = "isEthernetOpen";public static final String IS_ETHERNET_STATUC_OPEN = "isEthernetStaticOpen";public static final String ETHERNET_STATIC_DNS1 = "ethernet_static_dns1";public static final String ETHERNET_STATIC_DNS2 = "ethernet_static_dns2";public static final String ETHERNET_STATIC_GATEWAY = "ethernet_static_gateway";public static final String ETHERNET_STATIC_IP = "ethernet_static_ip";public static final String ETHERNET_STATIC_NETMASK = "ethernet_static_netmask";EthernetManager mEthernetManager;Context mContext;private static EthernetUtil ethernetUtil;public static EthernetUtil getInstance() {if (ethernetUtil == null) {ethernetUtil = new EthernetUtil();}return ethernetUtil;}public void setContext(Context context) {mContext = context;}public void saveEthernetConfig() {boolean isOpen = isEthernetEnabled();boolean isStatic = isStaticEnabled();Log.d(TAG, "saveEthernetConfig isOpen=" + isOpen + " isStatic=" + isStatic);mEthernetManager = (EthernetManager) mContext.getSystemService(Context.ETHERNET_SERVICE);IpConfiguration mIpConfiguration = new IpConfiguration();StaticIpConfiguration.Builder staticIpConfiguration = new StaticIpConfiguration.Builder();ContentResolver mContentResolver = mContext.getContentResolver();if (isOpen) {if (isStatic) {try {String ip = System.getString(mContentResolver, ETHERNET_STATIC_IP);String gateWay = System.getString(mContentResolver, ETHERNET_STATIC_GATEWAY);String netMask = System.getString(mContentResolver, ETHERNET_STATIC_NETMASK);String dns1 = System.getString(mContentResolver, ETHERNET_STATIC_DNS1);String dns2 = System.getString(mContentResolver, ETHERNET_STATIC_DNS2);staticIpConfiguration.setIpAddress(new LinkAddress(InetAddress.getByName(ip),getNetMaskInt(netMask)));staticIpConfiguration.setDomains(netMask);staticIpConfiguration.setGateway(InetAddress.getByName(gateWay));ArrayList<InetAddress> dnsAddresses = new ArrayList<>();dnsAddresses.add((Inet4Address) InetAddress.getByName(TextUtils.isEmpty(dns1) ? "8.8.8.8" : dns1));dnsAddresses.add((Inet4Address) InetAddress.getByName(TextUtils.isEmpty(dns2) ? "114.114.114.114" : dns2));staticIpConfiguration.setDnsServers(dnsAddresses);} catch (Exception e) {e.printStackTrace();}Log.d(TAG, "IpAssignment.STATIC =" + IpConfiguration.IpAssignment.STATIC);mIpConfiguration.setIpAssignment(IpConfiguration.IpAssignment.STATIC);mIpConfiguration.setProxySettings(IpConfiguration.ProxySettings.STATIC);mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration.build());} else {mIpConfiguration.setIpAssignment(IpConfiguration.IpAssignment.DHCP);mIpConfiguration.setProxySettings(IpConfiguration.ProxySettings.NONE);mIpConfiguration.setStaticIpConfiguration(null);Log.d(TAG, "IpAssignment.DHCP =" + IpConfiguration.IpAssignment.DHCP);}setConfiguration("eth0", mIpConfiguration);setEthernetEnabled(true);Log.d(TAG, "setEthernet true");} else {setEthernetEnabled(false);Log.d(TAG, "setEthernet false");}}private void setEthernetEnabled(boolean enabled) {try {Class<? extends EthernetManager> c = mEthernetManager.getClass();Method method = c.getMethod("setEthernetEnabled", boolean.class);EthernetManager tempManager = mEthernetManager;method.setAccessible(true);Log.e(TAG, "get setEthernetEnabled Method: " + (method == null));method.invoke(tempManager, enabled);} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {Log.e(TAG, "getDeclaredMethod: " + e.getMessage());}}private void setConfiguration(String iface, IpConfiguration config) {try {Class<? extends EthernetManager> c = mEthernetManager.getClass();Method method = c.getMethod("setConfiguration", String.class, IpConfiguration.class);EthernetManager tempManager = mEthernetManager;method.setAccessible(true);Log.e(TAG, "get setConfiguration Method: " + (method == null));method.invoke(tempManager, iface, config);} catch (Exception e) {Log.e(TAG, "getDeclaredMethod: " + e.getMessage());}}private String interMask2String(int prefixLength) {String netMask = null;int inetMask = prefixLength;int part = inetMask / 8;int remainder = inetMask % 8;int sum = 0;for (int i = 8; i > 8 - remainder; i--) {sum = sum + (int) Math.pow(2, i - 1);}if (part == 0) {netMask = sum + ".0.0.0";} else if (part == 1) {netMask = "255." + sum + ".0.0";} else if (part == 2) {netMask = "255.255." + sum + ".0";} else if (part == 3) {netMask = "255.255.255." + sum;} else if (part == 4) {netMask = "255.255.255.255";}return netMask;}public boolean isValidIpAddress(String value) {int start = 0;int end = value.indexOf('.');int numBlocks = 0;while (start < value.length()) {if (-1 == end) {end = value.length();}try {int block = Integer.parseInt(value.substring(start, end));if ((block > 255) || (block < 0)) {Log.w(TAG, "isValidIpAddress() : invalid 'block', block = " + block);return false;}} catch (NumberFormatException e) {Log.w(TAG, "isValidIpAddress() : e = " + e);return false;}numBlocks++;start = end + 1;end = value.indexOf('.', start);}return numBlocks == 4;}private int getNetMaskInt(String netMask) {Log.d(TAG, "netMask =" + netMask);StringBuffer sbf;String str;int prefixLength = 0, count = 0;String[] split = netMask.split("\\.");for (int n = 0; n < split.length; n++) {sbf = toBin(Integer.parseInt(split[n]));str = sbf.reverse().toString();//Log.e("net", split[n] + "===" + str);count = 0;for (int i = 0; i < str.length(); i++) {i = str.indexOf('1', i);if (i == -1) {break;}count++;}prefixLength += count;}return prefixLength;}private StringBuffer toBin(int x) {StringBuffer result = new StringBuffer();result.append(x % 2);x /= 2;while (x > 0) {result.append(x % 2);x /= 2;}return result;}public String getSaveIp(){return Settings.System.getString(mContext.getContentResolver(), ETHERNET_STATIC_IP);}public String getSaveNetMask(){return Settings.System.getString(mContext.getContentResolver(), ETHERNET_STATIC_NETMASK);}public String getSaveGateway(){return Settings.System.getString(mContext.getContentResolver(), ETHERNET_STATIC_GATEWAY);}public String getSaveDns1(){return Settings.System.getString(mContext.getContentResolver(), ETHERNET_STATIC_DNS1);}public String getSaveDns2(){return Settings.System.getString(mContext.getContentResolver(), ETHERNET_STATIC_DNS2);}public boolean isEthernetEnabled() {return Settings.System.getInt(mContext.getContentResolver(), IS_ETHERNET_OPEN, 0) == 1;}public boolean isStaticEnabled() {return Settings.System.getInt(mContext.getContentResolver(), IS_ETHERNET_STATUC_OPEN, 0) == 1;}public void setEthernetEnabled(boolean flag) {Settings.System.putInt(mContext.getContentResolver(), IS_ETHERNET_OPEN, flag ? 1 : 0);}public void setStaticEnabled(boolean flag) {Settings.System.putInt(mContext.getContentResolver(), IS_ETHERNET_STATUC_OPEN, flag ? 1 : 0);}}
相关文章:
android13(T) 以太网设置工具类
13 版本的以太网设置和以前版本有所变动,在 AS 中就能直接调用对应 API 将 build.gradle 版本修改 compileSdkVersion 31, 即可直接调用 EthernetManager 相关, 设置静态等方法可以通过反射调用设置。 以下是核心设置静态和动态参数工具类,…...
电脑报错提示xinput1_3.dll缺失怎么办?xinput1_3.dll丢失的简单恢复方案
今天,我将为大家分享一个与我们日常工作息息相关的话题——xinput1_3.dll丢失的4种解决方法。在我们的日常工作和生活中,电脑出现问题是常有的事,而xinput1_3.dll丢失则是其中较为常见的一种问题。那么,什么是xinput1_3.dll?它为…...
unity 之参数类型之引用类型
文章目录 引用类型引用类型与值类型的差异 引用类型 在Unity中,引用类型是指那些在内存中存储对象引用的数据类型。以下是在Unity中常见的引用类型的介绍: 节点(GameObject): 在Unity中,游戏对象ÿ…...
SpringBoot自定义工具类—基于定时器完成文件清理功能
直接复制粘贴既可!! import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOff…...
安卓设置混淆后,gson报错解决方法
一,设置开启混淆release {minifyEnabled truezipAlignEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro } 二,混淆的文件中,对gson相关类不进行混淆,否…...
WPF实战项目十四(API篇):登录注册接口
1、新建UserDto.cs public class UserDto : BaseDto{private string userName;/// <summary>/// 用户名/// </summary>public string UserName{get { return userName; }set { userName value;OnPropertyChanged(); }}private string account;/// <summary>…...
10个免费PPT下载资源网站分享
PPT超级市场https://pptsupermarket.com/ PPT超级市场是一个完全免费的PPT模板下载网站,不需要注册登录,点击下载就能直接使用。 叮当设计https://www.dingdangsheji.com/ 叮当设计是一个完全免费的PPT模板下载网站,每一套PPT的质量都很高。除…...
SpringCloud入门——微服务调用的方式 RestTemplate的使用 使用nacos的服务名初步(Ribbon负载均衡)
目录 引出微服务之间的调用几种调用方法spring提供的组件 RestTemplate的使用导入依赖生产者模块单个配置的情况多个配置的情况没加.yaml的报错【报错】两个同名配置【细节】 完整代码config配置主启动类controller层 消费者模块进行配置restTemplate配置类controller层 使用na…...
Python基础篇(16):python中__new__方法
一、__new__方法的定义 __new__() 方法是一种负责创建 类实例 的 静态方法 二、__new__方法的作用 在内存中为对象分配空间返回对象的引用 三、__new__方法的使用 创建对象时自动调用__new__方法,并且是在__init__初始化方法之前被调用Python解释器获得对象的引…...
linux并发服务器 —— 文件IO相关函数(三)
文件IO 以内存为主体,看待输入输出; 标准C库IO函数带有缓冲区,效率较高; 虚拟地址空间 虚拟地址空间是不存在的,一个应用程序运行期间对应一个虚拟地址空间; 虚拟地址空间的大小由CPU决定,位…...
matlab使用教程(27)—微分代数方程(DAE)求解
1.什么是微分代数方程? 微分代数方程是一类微分方程,其中一个或多个因变量导数未出现在方程中。方程中出现的未包含其导数的变量称为代数变量,代数变量的存在意味着您不能将这些方程记为显式形式 y ′ f t , y 。相反,您可以…...
vue3组合式api <script setup> props 父子组件的写法
父组件传入子组个的变量, 子组件是无法直接修改的, 只能通过 emit的方式, 让父组件修改, 之后子组件更新 <template><div class"parent">我是父组件<son :msg"msg" :obj"obj" chan…...
Compose - 自定义作用域限制函数
一、概念 在 Compose 中对于作用域的应用特别多。比如 weight 修饰符只能用在 RowScope 或者 ColumnScope 作用域中,item 组件只能用在 LazyListScope 作用域中。 标准库中的作用域函数如 apply()、let() 会以不同方式持有和返回上下文对象,调用它们时 L…...
【Flutter】Flutter 使用 photo_view 实现图片查看器
【Flutter】Flutter 使用 photo_view 实现图片查看器 文章目录 一、前言二、photo_view 简介三、安装与基本使用四、使用 PhotoViewGallery 展示多张图片五、完整示例六、总结 一、前言 大家好,我是小雨青年,今天我要给大家介绍一个在 Flutter 中非常实…...
电脑组装教程分享!
案例:如何自己组装电脑? 【看到身边的小伙伴组装一台自己的电脑,我也想试试。但是我对电脑并不是很熟悉,不太了解具体的电脑组装步骤,求一份详细的教程!】 电脑已经成为我们日常生活中不可或缺的一部分&a…...
【云原生之Docker实战】使用Docker部署flatnotes笔记工具
【云原生之Docker实战】使用Docker部署flatnotes笔记工具 一、flatnotes介绍1.1 flatnotes简介1.2 flatnotes特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载flatnotes…...
XSSchallenge1-20
test1 第一题直接在test插入XSS代码即可 test2 第二关对内容进行”“包裹 这里可以采用”>来绕过 test3 代码审计发现这里用了htmlspecialchars函数,这个函数对<>和’ “等进行了转义,这里可以用事件来绕过 test4 这里用了str_replace&a…...
centos 7的超详细安装教程
打开虚拟机,创建一个新电脑 我们选择经典,然后选择下一步 我们选择稍后安装,我们在后面进行改设备 因为centos系统是linux系统的一个版本,所有我们选择linux,版本选择centos 7 64位,然后就是点击下一步 这一…...
代码随想录算法训练营第五十二天 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组
代码随想录算法训练营第五十二天 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 题目链接 视频讲解 给你一个整数数组 nums ,找到其中最…...
计算机图形软件(三)6-6 小结
小结 这一章概括了图形软件系统的主要特点。某些软件系统,如 CAD 软件包和绘图程序,其为特定应用而设计。另外一些软件系统则提供可以在诸如 C的程序设计语言中使用的一个通用图形子程序库,用来为任何应用生成图片。 ISO和AN…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
