对于下述情况,最佳解决方案是用户是否具有有效的互联网连接(通过激活我的意思是用户可以打开任何网络URl)。
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204") .openConnection()); urlc.setRequestProperty("User-Agent", "Android"); urlc.setRequestProperty("Connection", "close"); urlc.connect(); Log.d("reqcode",""+urlc.getResponseCode()); return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
并且在性能方面最佳。
答案 0 :(得分:1)
使用这样的方法:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
然后只是:
if(isNetworkAvailable()) {
//Do what you want with internet
} else {
//Do something wothout internet
}
您还需要在清单文件中添加:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
无论如何:Question
答案 1 :(得分:0)
我使用以下方法检查用户是否通过移动数据或Wi-Fi进行了有效的互联网连接。
public static boolean isInternetConnected() {
ConnectivityManager connectivityManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
并在清单文件中添加权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
无法确定用户是否有活动连接。如果用户没有活动连接,您在问题中建议的方法将导致您等待很长时间,并在一段时间后抛出
SocketTimeOutException
。
因此,如果您想检查用户是否有互联网连接,那么只检查它是否启用了Wi-Fi和/或数据连接,并假设数据包已打开。
答案 2 :(得分:0)
请勿ping网站以检查互联网连接。这是一个非常糟糕的做法,因为该网站可以永久阻止您的应用程序,或者只是一台服务器可能已关闭。
而是使用here来监听互联网连接Intent
。从BradcastReceiver
和onReceive
使用
private boolean isConnectedToInternet(){
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
检查连接状态。
您可能还希望使用
在Activity
的{{1}}和onResume()
方法中注册和取消注册接收方
onPause()