处理互联网连接:特殊情况

时间:2018-06-21 12:59:52

标签: android internet-connection

假设有两个移动台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
    }

它应该出现在其他部分,但是没有出现。

4 个答案:

答案 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);
   }
}