Android 有线网开发调试总结
文章目录
- [Android 有线网开发调试总结](#Android 有线网开发调试总结)
一、前言
如果开发有线网相关功能,必须先掌握基本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的逻辑更复杂的,并且是隐蔽的。目前无法设置。