![](/img/trans.png)
[英]Android - Check internet connection through an specific network (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.