Android 检查Internet连接是否可用?

Android 检查Internet连接是否可用?,android,Android,我正在开发在线应用程序。[问题]当互联网关闭或不可用时,它会给我错误[Force close],我尝试使用广播接收器处理,但没有达到确切的解决方案,正在寻找更好的解决方案 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { NetworkInfo info =

我正在开发在线应用程序。[问题]当互联网关闭或不可用时,它会给我错误[Force close],我尝试使用广播接收器处理,但没有达到确切的解决方案,正在寻找更好的解决方案

public class MyBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {

    NetworkInfo info = intent
            .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

    if (null != info) {

        String state = info.getState().toString();

        if (state.equalsIgnoreCase("CONNECTED")) {
            SplashScreen.isWiFiConnected = true;
            Log.i("isWifiConnected", "=================TRUE");
        } else {
            SplashScreen.isWiFiConnected = false;
            Log.i("isWifiConnected", "=================FALSE");
        }

    }

}

}

谢谢。

只需使用此功能检查Internet连接是否可用:

/**
   * Checks if the device has Internet connection.
   * 
   * @return <code>true</code> if the phone is connected to the Internet.
   */
    public static boolean checkNetworkConnection(Context context)
    {
        final ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        
        final android.net.NetworkInfo wifi =connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        final android.net.NetworkInfo mobile =connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        
        if(wifi.isAvailable()||mobile.isAvailable())
            return true;
        else
            return false;
    }
注:
不要忘记在AndroidManifest.xml文件中添加权限:

有效的网络连接并不一定意味着您可以访问Internet,OP正在询问检查Internet连接可用性的方法。一些WiFi网络可能需要用户打开浏览器并通过某种授权才能允许访问互联网,因此在这种情况下,仅检查有效的WiFi连接是不够的

在不创建GET/POST连接的情况下检查原始连接的简单方法是:

private boolean isConnected() {

    try {
        InetAddress.getByName("google.com");
    } catch (UnknownHostException e) {
        return false;
    }
    return true;
}
警告1: 在做了一些测试之后,我必须警告说,上面的代码并没有真正起作用,即使它在前几次看起来是这样的

代码尝试解析DNS缓存中不存在的主机名,因此,一旦缓存了成功的查找,代码将继续返回true,即使主机不再可访问,因为所有现代操作系统都进行DNS缓存

但是。。。在Android上,该类还有一个在标准JavaSE中找不到的附加方法-,根据javadocs:

尝试访问此InetAddress。此方法首先尝试使用ICMP(ICMP回显请求),然后返回到远程主机端口7(回显)上的TCP连接

因此,对上述代码可能的修复方法是

InetAddress.getByName("google.com").isReachable(5000);

在ICMP数据包被阻止的情况下,检查可达性的唯一可靠方法是通过或中间的任何方式与主机建立真正的连接。

他只是描述了一个关于检查网络可用性的问题。我想您还没有看到这一行SplashScreen.isWiFiConnected=false;您需要使用if(wifi.isConnectedOrConnecting()| | mobile.isConnectedOrConnecting()){而不是isAvailable(),否则它将始终返回true抱歉,我没有更新它,但您可以在以下位置检查更新:,Thanx
private boolean isConnected() {

    try {
        InetAddress.getByName("google.com");
    } catch (UnknownHostException e) {
        return false;
    }
    return true;
}
InetAddress.getByName("google.com").isReachable(5000);