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

Android 有线网开发调试总结

Android 有线网开发调试总结

文章目录

  • Android 有线网开发调试总结
    • 一、前言
    • 二、有线网开发
      • 1、开关
      • 2、相关日志
        • (3)相关广播
        • (4)demo示例
    • 三、其他
      • 1、Android 有线网开发调试小结
      • 2、Android13 有线网开关研究
      • 3、Android9、11 有线网络开关设置
      • 4、Android13 实现有线网络和wifi共存
      • 5、Android11 有线网Score分析流程

一、前言

如果开发有线网相关功能,必须先掌握基本api知识和相关广播的监听;

Android13 之后有线网是有暴露开关控制api的,Android11 之前是需要自己添加开关控制接口的。

本简单介绍有线网开发基本知识,有兴趣的可以看看。

二、有线网开发

1、开关

//开关
EthernetManager ethernetManager = (EthernetManager)context.getSystemService(Context.ETHERNET_SERVICE);
ethernetManager.setEthernetEnabled(isEnable);//true、false参数表示开关

Android 11已经更旧的版本,系统未暴露有线网开关api,需要自己在EthernetManager里面添加接口。

Android13 或者更新的版本,系统才暴露有线网开关api接口,进行开关控制,

但是默认是没有开关状态记录,需要自定义属性进行记录。

2、相关日志

有线网节点关键字是:eth
上层关键字:EthernetTracker、EthernetNetwork、ConnectivityService
分配ip的关键字:DHCP日志过滤示例:
logcat | grep -i "eth"
logcat | grep -iE "EthernetTracker|EthernetNetwork|ConnectivityService"
logcat | grep -iE "EthernetTracker|EthernetNetwork|ConnectivityServic|eth"

有线网正常开启,并自动获取到ip部分日志:

logcat | grep -iE "EthernetTracker|EthernetNetwork|ConnectivityService"
04-26 17:23:37.997   821  1038 I EthernetTracker: maybeTrackInterface: eth0 //打开节点
04-26 17:23:38.191   821  1038 D EthernetNetworkFactory: updateInterfaceLinkState, iface: eth0, up: false
04-26 17:23:41.257   821  7570 I EthernetTracker: interfaceLinkStateChanged, iface: eth0, up: true //节点启动成功
04-26 17:23:41.307  1231  5322 D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=192.168.31.6 serverid=192.168.31.1 //分配到ip
04-26 17:23:41.335   821  1040 D ConnectivityService: [113 ETHERNET] EVENT_NETWORK_INFO_CHANGED, going from CONNECTING to CONNECTED
04-26 17:23:41.337   821  1040 D ConnectivityService: Setting DNS servers for network 113 to [/192.168.31.1] 
04-26 17:23:41.339   821  1040 D ConnectivityService: Adding iface eth0 to network 113 //网络注册正常

上面可以看到,打开有线网开关到自动获取有线网ip大概需要5秒。有时候只要1-2秒就可以。

(3)相关广播
Android没有有线网插拔变化的广播,ip变化可以用监听到。
ConnectivityManager.CONNECTIVITY_ACTION:网络ip变化广播,wifi和有线网通用
String ETHERNET_STATE_CHANGE = "action.ebsw.eth.status.change"; //自定义的底层回调后有线网络广播,这个是系统底层监听io口回调的。
(4)demo示例

在这里插入图片描述

上面是开启有线网后显示ip的基本信息。

设置静态ip和代理信息后的显示:

在这里插入图片描述

有线网demo 的简单说明:

1、Android 原生没有有线网开关状态,需要自定义属性进行开关记忆;所以默认没设置switch开关控件;
2、有线网开关状态之前方案都是使用Settings.Global.ethernet 开关记录的,3588 AN15 使用的是prop属性记录;
3、静态ip设置:要和自动获取的ip在同一个网段;网关一般设置成X.X.X.1,设置错误会导致无法上网;
4、代理设置:端口号有范围:1-65535,以前好像遇到过311D2 wifi设置端口号范围超出数值会导致系统重启。
5、有些方案设置静态ip或者代理需要关开一次有线网才能生效。
6、有线网接入状态是导入了定制包的,只针对特定系统,其他系统不适用,直接使用估计会崩溃,
其他系统调试需要去除判断有线网接入部分代码,重新编译apk使用;
底层是如何实现判断有线网接入的,没有去研究分析,大概是通过io是否接入判断的。

有线网调试demo源码和apk.zip 下载地址:

https://download.csdn.net/download/wenzhi20102321/90780716

三、其他

1、Android 有线网开发调试小结

Android13 之后有线网在EthernetManager有暴露开关控制api的,Android11 之前是需要自己添加开关控制接口的。

有线网开关默认是没有开关状态记录,需要自定义属性进行记录。

2、Android13 有线网开关研究

主要 对比 Android9 自己开发的有线网开关代码 :

https://blog.csdn.net/wenzhi20102321/article/details/131871354

3、Android9、11 有线网络开关设置

Android系统开发中发现,Android8以后有线网络开关没有api了,

需要自己进行通路建造,或者自己实现开关控制。

这部分修改在Framework 的Java层进行修改即可完成:

https://blog.csdn.net/wenzhi20102321/article/details/122243396

4、Android13 实现有线网络和wifi共存

Android 系统Framework进行一定适配后,可以实现wifi和有线网络端口都打开的,

如果同时连接wifi和有线网网络,优先并且默认使用的是有线网的网络,

但是可以在App端即可实现通过代码控制选择使用wifi或者有线网络进行网络请求。

https://blog.csdn.net/wenzhi20102321/article/details/133950414

5、Android11 有线网Score分析流程

Android 有线网络和wifi,同时连通,并且设置优先级。可以随时切换网络优先级 :

https://blog.csdn.net/wenzhi20102321/article/details/128211377

Android13 以后的代码,Score的逻辑更复杂的,并且是隐蔽的。目前无法设置。

http://www.xdnf.cn/news/314767.html

相关文章:

  • 【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术
  • C26-冒泡排序法
  • Flutter——数据库Drift开发详细教程(五)
  • 二叉平衡树
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.29)
  • Linux 驱动开发步骤及 SPI 设备驱动移植示例
  • 基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例
  • Docker 容器镜像环境的依赖导出
  • Android 10.0 SharedPreferences in credential encrypted storage are not avai
  • 声波解码器:当40kHz遇见AIoT时代——超声波传感器的“隐形智慧”革命
  • 从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
  • 【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案
  • 内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)
  • stm32常见错误
  • 矩阵扩展-算卷积算法介绍及C语言代码实现
  • Node.js vs 浏览器中的JavaScript:区别全解析
  • QT —— QWidget(2)
  • 【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
  • 全文索引数据库Elasticsearch底层Lucene
  • SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
  • 【Pandas】pandas DataFrame expanding
  • 常用设计模式在 Spring Boot 项目中的实战案例
  • 【LLM+Code】Devin PromptTools详细解读
  • 【spring】Spring、Spring MVC、Spring Boot、Spring Cloud?
  • 【Bootstrap V4系列】学习入门教程之 组件-折叠(Collapse)
  • Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战
  • 802.11s Mesh 组网框架流程
  • 【Hive入门】Hive数据导入与导出:批量操作与HDFS数据迁移完全指南
  • Windows环境下maven的安装与配置
  • 前端取经路——工程化渡劫:八戒的构建之道