在android中检测互联网连接的最佳方法

时间:2016-08-31 22:54:16

标签: android connection connectivity

当我通过网络服务将数据上传到服务器时,我必须在上传数据之前检查互联网连接,这可能会花费我的时间(即使用asyntask来检查与进度对话框的互联网连接)操作甚至用户可能会感觉到一些任何人都可以告诉我哪个是检测互联网连接的最佳方法。

3 个答案:

答案 0 :(得分:3)

以下是一种可用于验证数据连接是否可用的方法:

public static boolean isDataConnectionAvailable(Context context) {
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
}

如果返回true,则表示有可用的数据连接。

还要确保将其添加到清单中:

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

答案 1 :(得分:0)

public static NETWORK_AVAILABILITY_STATUS getAvailableNetworkType(Context context)
    {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();

        if (activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting())
        {
            int type = activeNetworkInfo.getType();
            if (type == ConnectivityManager.TYPE_MOBILE)
            {
                return NETWORK_AVAILABILITY_STATUS.DATA_PLAN;
            }
            else if (type == ConnectivityManager.TYPE_WIFI)
            {
                return NETWORK_AVAILABILITY_STATUS.WIFI;
            }
        }

        return NETWORK_AVAILABILITY_STATUS.NO_NETWORK;
    }

注意:您需要获得互联网许可,即

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

注意:此方法不保证网络可以访问,连接可能仍然超时或根本不响应。

答案 2 :(得分:0)

我在我的应用中使用这种方式:

public static boolean isConnect(Activity activity) {
    boolean flag = false;

    ConnectivityManager cwjManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cwjManager.getActiveNetworkInfo() != null)
        flag = cwjManager.getActiveNetworkInfo().isAvailable();

    return flag;
}

当然,你还需要android权限:

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