假设有两个移动台A和B。打开移动台A的热点,然后连接移动台B。 现在关闭移动设备A的移动数据。 对于移动B,有可用的网络,但由于移动A中的移动数据已关闭,因此无法连接。
如何在编码中处理此问题?
我正在这样检查Internet连接。
public boolean isNetworkConnected() {
boolean connected = false;
ConnectivityManager connectivityManager;
connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
connected = networkInfo != null && networkInfo.isAvailable() &&
networkInfo.isConnected();
return connected;
}
从活动中,我正在这样做。
if (isNetworkConnected()) {
// Connection Available
} else {
// No Connection
}
它应该出现在其他部分,但是没有出现。
答案 0 :(得分:1)
您可能必须对URI做openConnection()
。尝试在可运行文件中使用以下代码:
public boolean isHostReachable() {
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
try{
URI uri = new URI(YOUR_URL_HERE);
String domainName = uri.getScheme() + "://" + uri.getRawAuthority();
URL url = new URL(domainName);
URLConnection urlConn = url.openConnection();
urlConn.connect();
return true;
} catch (IOException | URISyntaxException e) {
return false;
}
答案 1 :(得分:1)
您还可以使用InetAddress进行检查
public boolean isInternetAvailable() {
try {
InetAddress ipAddr = InetAddress.getByName("google.com");
//You can replace it with your name
return !ipAddr.equals("");
} catch (Exception e) {
return false;
}
}
答案 2 :(得分:0)
在清单中添加ACCESS_NETWORK_STATE权限。
答案 3 :(得分:0)
要检测实际的互联网连接,您需要使用Ping进行测试,例如,此代码将对www.google.com进行ping操作以检查连接,如果无法使用,则可以使用ping命令(由于其可靠性)。发生错误,它回退到InetAddress isReachable方法。
public boolean isConnected(){
try{
Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
int returnVal = p1.waitFor();
return returnVal==0;
} catch(Exception e){
//fallback to java's ICMP implementation
return InetAddress.getByName("8.8.8.8").isReachable(1000);
}
}