【问题标题】:How to detect if user has 3G/Wifi on before making URL connection?如何在进行 URL 连接之前检测用户是否开启了 3G/Wifi?
【发布时间】:2010-09-09 21:50:05
【问题描述】:

如果用户没有 wifi 或 3g 连接,我不希望我的应用程序崩溃。如何在我的应用程序运行时捕捉到这一点?

【问题讨论】:

标签: java android android-wifi


【解决方案1】:

首先获取对 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);
    }

【讨论】:

    【解决方案2】:

    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;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多