Android网络

Android访问网络有很多种方式,比如WiFi,移动网络(3G等)...

他们是有一个优先级的。

  • 当WiFi连接,打开3G网络,3G网络将被自动屏蔽;
  • 当3G连接,连接WiFi,3G网络将被屏蔽,启用WiFi;
  • 当WiFi连接,然后关闭,如果3G网络可用,将自动切换到3G网络。

这是系统默认的,可以通过API来改变这种优先级。比如:当3G连接,连接WiFi,我们希望仍然使用3G网络,那么

ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);        
connMgr.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

当这样设置之后,会自动断开WiFi连接。

那通过代码,怎么知道WiFi是否连接或者移动网络是否连接呢?

    //判断是否有网络连接
    public boolean isOnline() {
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        //connMgr.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
        return (networkInfo != null && networkInfo.isAvailable());
    }
    //判断WiFi是否连接
    public boolean isWifiConnected() {
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return (networkInfo != null && networkInfo.isConnected());
    }
    //判断移动网络是否连接
    public boolean isMobileConnected() {
        ConnectivityManager connMgr = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        return (networkInfo != null && networkInfo.isConnected());
    }

判断WiFi是否连接,还可以通过WifiManager

//判断WiFi是否连接
    public boolean isWifiConnected() {
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if (wifiManager.isWifiEnabled()) {
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();

            return wifiInfo != null && SupplicantState.COMPLETED == wifiInfo.getSupplicantState();
        }

        return false;
    }

它还提供了很多操控WiFi的方法,比如连接或断开WiFi连接,打开或关掉WiFi等。

有WiFi连接并不等于连接到Internet。比如:手机连接到无线路由器,而无线路由器没有连接Internet,这种情况可以用代码容易地判断

    //判断WiFi连接时是否能够访问Internet
    public boolean hasWifiInternetAccess() {
        WifiManager mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if(mWifiManager.isWifiEnabled()) {
            return mWifiManager.pingSupplicant();
        }
        return false;
    }

上面的方法其实并不能准确的判断当WiFi连接是是否可以访问Internet。例如,当连接到机场的WiFi,它需要打开浏览器,在弹出的页面上输入用户名密码,此时pingSupplicant返回的是TRUE,当这种情况时,只能通过代码访问某个网址,检查返回值来检测是否能够上网。

Android网络,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。