如何在进行URL连接之前检测用户是否已启用3G / Wifi?

时间:2010-09-09 21:50:05

标签: java android android-wifi

如果用户没有wifi或3g连接,我不希望我的应用程序崩溃。如何在运行时在我的应用程序中捕获它?

2 个答案:

答案 0 :(得分:7)

首先获取对ConnectivityManager的引用,然后引用设备的check the Wifi and 3G status。 您需要ACCESS_NETWORK_STATE权限才能使用此服务。

    ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (mWifi.isConnected() == false && mMobile.isConnected() == false) {
        showDialog(DIALOG_NETWORK_UNAVAILABLE);
    }

答案 1 :(得分:1)

不推荐使用connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)。

以下是针对最新Android SDK的改进解决方案。

ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
        boolean is3gEnabled = false;
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Network[] networks = connManager.getAllNetworks();
            for(Network network: networks)
            {
                NetworkInfo info = connManager.getNetworkInfo(network);
                if(info!=null) {
                    if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                        is3gEnabled = true;
                        break;
                    }
                }
            }
        }
        else
        {
            NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if(mMobile!=null)
                is3gEnabled = true;
        }