确定 android 中是否可以通过 wifi 连接互联网
Determine if Internet connection is available through wifi in android
我正在开发一个也可以离线工作的应用程序。
我的场景是这样的:
我的手机范围内有两个 WIFI 设备。 Device1 有互联网连接,而 Device2 就像一个 WIFI 热点,它只发送我的应用程序将使用的少量数据。
当我连接到 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();
您可以尝试与远程主机建立 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://whosebug.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" />
我正在开发一个也可以离线工作的应用程序。
我的场景是这样的:
我的手机范围内有两个 WIFI 设备。 Device1 有互联网连接,而 Device2 就像一个 WIFI 热点,它只发送我的应用程序将使用的少量数据。
当我连接到 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();
您可以尝试与远程主机建立 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://whosebug.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" />