繁体   English   中英

已连接,Android 中没有互联网

[英]Connected, no Internet in Android

我一直在试图弄清楚如何处理 Android:已连接,无论您是使用 Wifi 还是蜂窝数据连接,都没有互联网条件。

代码:

public boolean checkForInternetConnectivity() {
        ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        if(manager != null) {            
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
                // Works when connected to the internet and when internet is available but the fails when no internet
                NetworkCapabilities networkCapabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());                    
                return networkCapabilities != null && (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
            }else {               
                NetworkInfo netInfo = null;
                netInfo = manager.getActiveNetworkInfo();
                return netInfo!= null && netInfo.isConnected();
            }
        }
        return false;
}

如果手机连接到互联网并且互联网可用,我只希望上述方法返回 true,如果没有互联网或连接,则返回 false。

所以我的问题是 - 我该如何处理“没有互联网”的情况? 是否有内置方法可用于执行此操作? 还是我在提到的代码本身中遗漏了一些东西?

替换此代码。

public final boolean checkForInternetConnectivity() {
            ConnectivityManager cm = (ConnectivityManager) getSystemService("connectivity");
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                if (activeNetwork.getType() == 1) {
                    return true;
                } else {
                    return activeNetwork.getType() == 0;
                }
            } else {
                return false;
            }
        }
    }

在清单文件中添加这个 android.permission.ACCESS_NETWORK_STATE 的权限。

确保在清单中添加此行:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

虽然您将在不同的活动中使用此方法,但我建议使用 static 方法更好。 添加此代码:

public static boolean isNetworkAvailable(Context context) {
            boolean HaveConnectWIFI = false;
            boolean HaveConnectMobile = false;

            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
            assert connectivityManager != null;
            NetworkInfo[] activeNetworkInfo = connectivityManager.getAllNetworkInfo();
            for (NetworkInfo ni : activeNetworkInfo) {
                if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                    if (ni.isConnected())
                        HaveConnectWIFI = true;
                if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                    if (ni.isConnected())
                        HaveConnectMobile = true;
            }
            return HaveConnectMobile || HaveConnectWIFI;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM