首页 > 解决方案 > Android如何检查互联网连接

问题描述

我希望能够获得用户互联网连接。我努力了

boolean connected = false;
    try {
        ConnectivityManager cm = (ConnectivityManager)getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
        connected = nInfo != null && nInfo.isAvailable() && nInfo.isConnected();
        return connected;
    } catch (Exception e) {
        Log.e("Connectivity Exception", e.getMessage());
    }
    return connected;

但这只会获取移动数据和 wifi 连接状态,如果用户的数据计划已过期或什至没有任何数据计划,我将无法知道。我想在进行服务器调用之前知道互联网状态,而不是创建服务器并在运行时间错误中运行。

请帮助我检查了堆栈溢出,但我一直得到相同的答案。

标签: javaandroidsketchware

解决方案


使用此功能检查互联网连接:

Boolean hasInternet(Context context) {
    ConnectivityManager connectivityManager =
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

        Network activeNetwork = connectivityManager.getActiveNetwork();
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(activeNetwork);

        if (capabilities != null) {
            if (capabilities.hasCapability(NetworkCapabilities.TRANSPORT_WIFI)) return true;
            else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) return true;
            else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) return true;
            else return false;
        }

    } else {
        try {
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            return networkInfo != null && networkInfo.isConnected();
        } catch (NullPointerException e){
            return false;
        }
    }
    return false;
}

推荐阅读