我有一段代码用于测试下载某些文件前是否存在网络连接。问题是,我还在测试需要基于Web的登录表单(类似于酒店、机场甚至飞机的网络)的网络。我使用的这段代码在这种情况下完全无用。网络报告显示在这些情况下它是可用的和连接的。当然,这是个问题,因为我启动了一个异步网络连接会失败。我想知道是否有人知道我可以做什么来确保我是“真正”连接或者对这个问题有任何建议。
这是我的代码块:
我的设备开启了飞行模式
这是我的代码块:
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
Log.e("", "Network info: "+networkInfo+" toString?: "+networkInfo.toString());
Log.e("", "getTypeName: "+networkInfo.getTypeName());
Log.e("", "isAvailable: "+networkInfo.isAvailable());
Log.e("", "isConnected: "+networkInfo.isConnected());
以下是我尝试过我的代码块并得到的结果。
Verizon上的1x信号
Network info: NetworkInfo: type: mobile[CDMA - 1xRTT], state: CONNECTED/CONNECTED, reason: connected, extra: , roaming: false, failover: true, isAvailable: true, isConnectedToProvisioningNetwork: false
toString?: NetworkInfo: type: mobile[CDMA - 1xRTT], state: CONNECTED/CONNECTED, reason: connected, extra: , roaming: false, failover: true, isAvailable: true, isConnectedToProvisioningNetwork: false
getTypeName: mobile
isAvailable: true
isConnected: true
Verizon上的3G信号
Network info: NetworkInfo: type: mobile[CDMA - eHRPD], state: CONNECTED/CONNECTED, reason: linkPropertiesChanged, extra: VZWINTERNET, roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false
toString?: NetworkInfo: type: mobile[CDMA - eHRPD], state: CONNECTED/CONNECTED, reason: linkPropertiesChanged, extra: VZWINTERNET, roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false
getTypeName: mobile
isAvailable: true
isConnected: true
我的设备开启了飞行模式
Crash: networkInfo NullPointerException
没有wifi - 没有移动数据(实际上是飞行模式)
Crash: networkInfo NullPointerException
WiFi(未经身份验证):
Network info: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
toString: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
getTypeName: WIFI
isAvailable: true
isConnected: true
WiFi(未经身份验证)第二设备:
Network info: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "myWifi", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false
toString?: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "myWifi", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false
getTypeName: WIFI
isAvailable: true
isConnected: true
WiFi(已认证)
Network info: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
toString?: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
getTypeName: WIFI
isAvailable: true
isConnected: true
WiFi (已认证) 第二设备:
Network info: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "myWifi", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false
toString?: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "myWifi", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false
getTypeName: WIFI
isAvailable: true
isConnected: true
正如您所看到的,在我有未经验证的Wifi和经过验证的Wifi的情况下,isAvailable
和isConnected
都返回true。