Android 有线网开发调试总结

Android 有线网开发调试总结

文章目录

  • [Android 有线网开发调试总结](#Android 有线网开发调试总结)
    • 一、前言
    • 二、有线网开发
    • 三、其他
      • [1、Android 有线网开发调试小结](#1、Android 有线网开发调试小结)
      • [2、Android13 有线网开关研究](#2、Android13 有线网开关研究)
      • [3、Android9、11 有线网络开关设置](#3、Android9、11 有线网络开关设置)
      • [4、Android13 实现有线网络和wifi共存](#4、Android13 实现有线网络和wifi共存)
      • [5、Android11 有线网Score分析流程](#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的逻辑更复杂的,并且是隐蔽的。目前无法设置。

相关推荐
鸿蒙布道师2 小时前
鸿蒙NEXT开发动画案例2
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
androidwork2 小时前
Kotlin Android工程Mock数据方法总结
android·开发语言·kotlin
xiangxiongfly9154 小时前
Android setContentView()源码分析
android·setcontentview
人间有清欢5 小时前
Android开发补充内容
android·okhttp·rxjava·retrofit·hilt·jetpack compose
人间有清欢6 小时前
Android开发报错解决
android
每次的天空8 小时前
Android学习总结之kotlin协程面试篇
android·学习·kotlin
每次的天空10 小时前
Android学习总结之Binder篇
android·学习·binder
是店小二呀11 小时前
【算法-链表】链表操作技巧:常见算法
android·c++·算法·链表
zhifanxu12 小时前
Kotlin 遍历
android·开发语言·kotlin