簡體   English   中英

確定是否可以通過android中的wifi進行互聯網連接

[英]Determine if Internet connection is available through wifi in android

我正在開發一個也可以脫機工作的應用程序。

我的情況是這樣的:
我的手機有兩個WIFI設備。 Device1具有Internet連接,而Device2就像是WIFI熱點,它僅發送我的應用程序將使用的少量數據。

當我連接到Device2時,我開始收集數據並保存在移動SQLite中。 當我切換到Device1並開始建立Internet連接時,我將通過API調用將數據同步到服務器。

情況是,每當我可以訪問Internet時,我都應該可以進行該API調用。

我該如何實現?

我瀏覽了許多文章,得到的只是wifi設備的連接狀態,而不是Internet連接。

注意:請不要讓我嘗試以下代碼:

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

您可以嘗試建立與遠程主機的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);

您唯一能做的是

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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM