根据log和代码,systemUI通过NetworkCapabilities.NET_CAPABILITY_VALIDATED,判断当前是否能上网,在连hub插入没有网络的网线时,此判断为true,log如下
// 直连有网络的网线
04-29 15:45:53.694 1402 1519 D NetworkController: updateConnectivity: mConnectedTransports={3}
04-29 15:45:53.700 1402 1519 D NetworkController: updateConnectivity: mValidatedTransports={3}
04-29 15:45:53.745 1402 1519 D NetworkController.EthernetSignalController: Change in state from: connected=false,enabled=false,level=0,inetCondition=0,iconGroup=IconGroup(Ethernet Icons),activityIn=false,activityOut=false,rssi=0,lastModified=04-29 15:44:36.567
04-29 15:45:53.745 1402 1519 D NetworkController.EthernetSignalController: to: connected=true,enabled=false,level=0,inetCondition=1,iconGroup=IconGroup(Ethernet Icons),activityIn=false,activityOut=false,rssi=0,lastModified=04-29 15:44:36.567
04-29 15:45:53.747 1402 1519 D NetworkController: onReceive: intent=Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4200010 (has extras) }
04-29 15:45:53.749 1402 1519 D NetworkController: updateConnectivity: mConnectedTransports={3}
04-29 15:45:53.749 1402 1519 D NetworkController: updateConnectivity: mValidatedTransports={3}
// 直连没有网络的网线
04-29 15:51:06.375 1402 1519 D NetworkController: updateConnectivity: mConnectedTransports={3}
04-29 15:51:06.377 1402 1519 D NetworkController: updateConnectivity: mValidatedTransports={}
04-29 15:51:06.379 1402 1519 D NetworkController.EthernetSignalController: Change in state from: connected=false,enabled=false,level=0,inetCondition=0,iconGroup=IconGroup(Ethernet Icons),activityIn=false,activityOut=false,rssi=0,lastModified=04-29 15:47:14.826
04-29 15:51:06.379 1402 1519 D NetworkController.EthernetSignalController: to: connected=true,enabled=false,level=0,inetCondition=0,iconGroup=IconGroup(Ethernet Icons),activityIn=false,activityOut=false,rssi=0,lastModified=04-29 15:47:14.826
04-29 15:51:06.382 1402 1519 D NetworkController: onReceive: intent=Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4200010 (has extras) }
04-29 15:51:06.412 1402 1519 D NetworkController: updateConnectivity: mConnectedTransports={3}
04-29 15:51:06.413 1402 1519 D NetworkController: updateConnectivity: mValidatedTransports={}
SystemUI代码如下
\vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\statusbar\policy
/**
* Update the Inet conditions and what network we are connected to.
*/
private void updateConnectivity() {
mConnectedTransports.clear();
mValidatedTransports.clear();
mCellularSubId = mSubscriptionManager.INVALID_SUBSCRIPTION_ID;
for (NetworkCapabilities nc :
mConnectivityManager.getDefaultNetworkCapabilitiesForUser(mCurrentUserId)) {
for (int transportType : nc.getTransportTypes()) {
mConnectedTransports.set(transportType);
if (transportType == NetworkCapabilities.TRANSPORT_CELLULAR) {
mCellularSubId = getSubIdFromNetrequest(nc.getNetworkSpecifier());
Log.d(TAG,"mCellularSubId = " + mCellularSubId);
}
if (nc.hasCapability(NET_CAPABILITY_VALIDATED)) {
mValidatedTransports.set(transportType);
}
}
}
if (mForceCellularValidated) mValidatedTransports.set(TRANSPORT_CELLULAR);
if (DEBUG) {
Log.d(TAG, "updateConnectivity: mConnectedTransports=" + mConnectedTransports);
Log.d(TAG, "updateConnectivity: mValidatedTransports=" + mValidatedTransports);
}
mInetCondition = !mValidatedTransports.isEmpty();
pushConnectivityToSignals();
}