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

Best way to detect internet connection in android

当我通过网络服务将我的数据上传到服务器时,我必须在上传数据之前检查互联网连接,这可能会花费我的时间(我使用 asyntask 通过进度对话框检查互联网连接)甚至用户可能会觉得加载太多谁能告诉我哪个是检测互联网连接的最佳方法。

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" />

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

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

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"/>

您可以使用以下方法来验证数据连接是否可用:

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

如果此 returns 为真,则有可用的数据连接。

还要确保将此添加到您的清单中:

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