Android6.0之后新增加了网络能力的标识类:NetworkCapabilities.java
路径:frameworks/base/core/java/android/net/NetworkCapabilities.java
public boolean hasCapability(int capability) {
if (capability < MIN_NET_CAPABILITY || capability > MAX_NET_CAPABILITY) {
return false;
}
return ((mNetworkCapabilities & (1 << capability)) != 0);
}
public NetworkCapabilities addCapability(int capability) {
if (capability < MIN_NET_CAPABILITY || capability > MAX_NET_CAPABILITY) {
throw new IllegalArgumentException("NetworkCapability out of range");
}
mNetworkCapabilities |= 1 << capability;
return this;
}
因此可以通过判断这个标记,来判断网络的连通性。
注:目前看来这只是一个用于判断的标识!!!
但是为什么会出现标题的问题呢?
原因是测试网络链接性的时候Android原生访问的是国外谷歌的网址,在国内是无法链通的,所以你懂得???
代码逻辑如下:
frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
所以从代码逻辑看,要想去掉此显示,只要把如下初始值改为0即可:
frameworks/base/packages/SetttinsProvider/res/values/defaults.xml路径下的
def_captive_portal_detection_enabled属性初始值改为0
本文详细解析了Android6.0后新增的NetworkCapabilities类,探讨其在网络连接判断中的作用及局限性,尤其针对国内网络环境下Google服务不可达的问题,提供了解决方案。
372





