在安卓设备上如何检查网络连接?

3

我想在我的应用程序中检查网络连接,但我不知道为什么我的代码不起作用?

public boolean isInternetConnected() {
    ConnectivityManager conMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean ret = true;
    if (conMgr != null) {
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i != null) {
            if (!i.isConnected()) {
                ret = false;
            }

            if (!i.isAvailable()) {
                ret = false;
            }
        }

        if (i == null)
            ret = false;
    } else
        ret = false;
    return ret;
}

检查是否已添加权限。 - Renjith Krishnan
如果getActiveNetworkInfo()不为null,则使用isConnected(),避免对所有内容进行空值检查,请确保您拥有Simple Pan所回复的权限。 - sherpya
4个回答

3
你是否在你的manifest.xml文件中添加了如下的Internet权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

@SP 我忘记在清单文件中添加此权限了。我会添加并尝试等待。 - user3414107

0
在清单文件中设置权限后,尝试使用此方法。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />   
<uses-permission android:name="android.permission.INTERNET" />

方法

/**
     * @param activity
     * @return Returns true if there is network connectivity
     */
    public static Boolean checkWIFI(Context activity) {
        ConnectivityManager cm = (ConnectivityManager) activity
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            return true;
        } else if (netInfo != null
                && (netInfo.getState() == NetworkInfo.State.DISCONNECTED
                        || netInfo.getState() == NetworkInfo.State.DISCONNECTING
                        || netInfo.getState() == NetworkInfo.State.SUSPENDED || netInfo
                        .getState() == NetworkInfo.State.UNKNOWN)) {
            return false;
        } else {
            return false;
        }
    }

将此作为通用方法,并传递您的Activity的上下文。

检查方法的返回类型

如果为True-表示互联网可用

如果为False-表示互联网不可用


0

也许你可以尝试下面的代码来明确检查WIFI / 移动数据的互联网连接:

public static boolean isDataEnabled(Context context)
{
    return (isMobileDataEnabled(context) || isWifiEnabled(context));
}


public static boolean isMobileDataEnabled(Context context)
{
    if(context == null)
        return false;
    ConnectivityManager connectivityManager = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = null;
    if (connectivityManager != null) {
        networkInfo =
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    }
    return networkInfo == null ? false : networkInfo.isConnected();
}

public static boolean isWifiEnabled(Context context)
{
    if(context == null)
        return false;
    ConnectivityManager connectivityManager = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = null;
    if (connectivityManager != null) {
        networkInfo =
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    }
    return networkInfo == null ? false : networkInfo.isConnected();
}

希望能有所帮助


0
public static final boolean checkDataConnection(Context cn)
    {
        ConnectivityManager connManager = (ConnectivityManager) cn.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mData = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (mData.isConnected())
            return true;
        else
            return false;
    }

并且在清单文件中

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接