在我的应用程序中,我使用以下方法检查互联网连接:
public static boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
现在,在活动中,我正在检查互联网连接,如下所示:
if (Constant.isOnline(mContext))
loadNotificationList();
else
Constant.displayToast(mContext, getResources().getString(R.string.msg_internet));
现在,如果MobileData或Wi-Fi关闭,我会收到烤面包消息。没关系。 但是,问题出在以下情况中:
==>我正在使用其他设备的Wi-Fi,其中热点已打开,我的设备已连接到它。现在,我已经关闭了另一台设备的移动数据。 这意味着:我没有互联网接入。 但是,我仍然从方法中获得 true : isOnline()
所以,我认为该方法仅检查状态。如果我想检查互联网访问是否可用,该怎么办?
感谢。
答案 0 :(得分:1)
我在项目中使用了以下方法。我上了一堂课CheckInternet
。我们的想法是使用isNetworkAvailable()
检查您是否已连接到任何网络。如果是,请通过ping hasActiveInternetConnection()
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class CheckInternet {
private static final String TAG = CheckInternet.class.getSimpleName();
protected Context context;
public CheckInternet(Context context) {
this.context = context;
}
private static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
public static boolean hasActiveInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
} catch (IOException e) {
Log.e(TAG, "Error checking Internet Connection - " + e);
}
} else {
Log.d(TAG, "No network available!");
}
return false;
}
}
您可以通过线程在任何地方调用此类(因为直接调用它会抛出 NetworkOnMainThreadException )。以下是我在片段中调用它的方式。
Thread th = new Thread(new Runnable() {
public void run() {
Boolean b = CheckInternet.hasActiveInternetConnection(getContext());
if (b) {
//Net is working, do whatever
} else {
//Net is NOT working
}
}
});
th.start();
答案 1 :(得分:0)
如果MobileData或wi-fi关闭,我会收到toast message
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
<强>问题强>
return
类型你应该这样试试,
public static boolean isOnline(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo == null)
return false;
if (!netInfo.isConnected())
return false;
if (!netInfo.isAvailable())
return false;
return true;
}
答案 2 :(得分:0)
以下网络方法是否可用。
public static boolean isNetworkAvailable(Context mContext) {
ConnectivityManager cm = (ConnectivityManager) mContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
Log.e("Network Testing", "***Available***");
return true;
}
Log.e("Network Testing", "***Not Available***");
return false;
}
在活动检查互联网连接。
if(Utils.isNetworkAvailable(mContext)){
isInternetAvailable = true;
}else{
isInternetAvailable = false;
}