栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android WIFI和有线网络优先级问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android WIFI和有线网络优先级问题

版本:Android 4.4

做TV方案需要添加一个有线网络优先功能,而Android中默认为WIFI优先

首先从安卓对外开放的接口入手,通过

ConnectivityManager.getActivelinkProperties();

方法能够获取到当前网络连接的对象,通过此对象可以解析IP,网关,DNS等信息,这些不是本篇重点,如何解析这些内容下次单独列一篇文章。

通过这个接口方法,找到在framework中ConnectivityService.java的实现

可以看到通过 mActiveDefaultNetwork这个变量在getlinkProperties方法中获取到了我们需要的信息。

在ConnectivityService中查找mActiveDefaultNetwork这个变量赋值的地方,可以看到在handleConnect方法中对mActiveDefaultNetwork进行了赋值

 handleConnect方法是私有方法,继续在ConnectivityService类中查找handleConnect的调用,最终查询到是在NetworkStateTrackerHandler的handleMessage中的NetworkStateTracker.EVENT_STATE_CHANGED这一条消息有对handleConnect方法进行调用。

通过上网查询得知NetworkStateTrackerHandler是处理网络变化的消息类,而NetworkStateTracker.EVENT_STATE_CHANGED会在网络状态变化时调用,通过查看代码,其中有一个handleCaptivePortalTrackerCheck方法,在这个方法中会对连接的网络进行检测,判断它与其他网络的优先级,以此决定是否切换网络

 这其中主要的判断是在isNewNetTypePreferredOverCurrentNetType方法中实现的,当返回true时便切换网络。

在这个方法中通过mActiveDefaultNetwork变量拿到当前连接的网络对象,以及通过传入的type获取需要比较的对象,当传入对象的优先级高于当前对象时或者mNetworkPreference与当前网络不一致时就会切换网络。

可以看到这里有两个判断条件都能够满足我们的需求,将有线网络的priority调高,或者将mNetworkPreference设置为代表有线网络的FLAG。

这里我们先查看priority是在哪里进行定义的。在这个方法中可以看到是通过mNetConfigs这个数组来获取对象信息,我们查看这个数组在何处进行的初始化赋值操作。

 在ConnectivityService的构造方法中,我们可以看到mNetConfigs是从networkAttributes这个数组中获取到数值并存入数组。

 找到这个数组在资源文件中定义的位置,通过阅读注释,可以知道中的第四个数据就是我们的网络优先级,而ethernet就是我们的有线网络,优先级为2,已经是这几个当中最高的优先级,但是这与我们软件运行起来看到的现象是不一致的。最后网络上查询得知,这个资源文件在软件编译时会被安卓根目录下device/目录中的overlay替代。

 查看此目录下的文件,确实如此。将优先级设置为2之后此需求顺利解决。

上面有提到过,还有另一个变量mNetworkPreference,当这个变量与当前网络不一致时,也会返回true,进行切换网络的操作,我们继续查找mNetworkPreference变量的赋值流程。

 在ConnectivityService的构造方法中,可以看到首先是从getPersistedNetworkPreference方法获取到一个值,后续通过遍历数组和判断将n赋值给mNetworkPreference。

我们查看 mPriorityList数组可以看到,实际上也是通过mNetConfigs的优先级拿到最高的优先级对象,并保存此对象的type,所以与上面修改priority也是同一个道理,到此这个问题就顺利解决了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号