确定在android中是否可以通过wifi获得Internet连接

时间:2016-12-04 12:12:05

标签: android android-wifi

我正在开发一款也将脱机工作的应用。

我的情况是这样的:
我的手机有两个WIFI设备。 Device1具有互联网连接,其中Device2就像一个WIFI-Hotspot,它只发送我的应用程序将使用的少量数据。

当我连接到Device2时,我开始收集数据并保存在移动SQLite中。当我更改为Device1并开始连接互联网时,我将通过API调用将数据同步到我的服务器。

案例是,当我有权访问互联网时,我应该可以进行API调用。

我如何实现这一目标?

我浏览了很多文章,我得到的只是wifi设备的连接状态,而不是互联网连接。

注意:请不要让我试试这段代码:

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);<br/>
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();<br/>
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();

2 个答案:

答案 0 :(得分:1)

您可以尝试与远程主机建立TCP连接:

public boolean hostAvailable(String host, int port) {
  try (Socket socket = new Socket()) {
    socket.connect(new InetSocketAddress(host, port), 2000);
    return true;
  } catch (IOException e) {
    // Either we have a timeout or unreachable host or failed DNS lookup
    return false;
  }
}

检查一下:

boolean online = hostAvailable("www.your-service.com", 80);

答案 1 :(得分:0)

你唯一能做的就是

if(isNetworkAvailable}{
     if(isHostAvailable){
      //perform your communication
     }
}

//检查服务器连接状态

 private boolean isHostAvailable() {
    URL url = new URL("http://stackoverflow.com");// specify the url
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    System.out.println(conn.getResponseCode());
     if(conn.getResponseCode().equalsIgnoreCase("200")){
          return true;
     }

    return false;
 }

//检查设备连接状态

 private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager 
              = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

您还需要:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />