zoukankan      html  css  js  c++  java
  • 检测网络变化(wifi、2g、3g、4g)

    1.注册广播"android.net.conn.CONNECTIVITY_CHANGE"和"android.net.wifi.STATE_CHANGE" 进行监听:

    private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                try
                {
                    String action = intent.getAction();
                    Log.e("ConnectivityBroadcastReceiver", "action= "+action);
                    if ((!action.equals(ConnectivityManager.CONNECTIVITY_ACTION) 
                            && !action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
                            || !isListening_) {
                        return;
                    }
    
                    if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 
                        networkInfo_ = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
                        if(networkInfo_.isConnected()) { 
                            // WIFI is connected 
                            state_ = NET_STATE_WIFI_CONNECTED;
                        }else{
                            state_ = NET_STATE_DISCONNECTED;
                        }
                    } else if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
                        networkInfo_ = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
                        String apn = networkInfo_.getExtraInfo();
                        Log.e("ConnectivityBroadcastReceiver", "apn= "+apn);
                        boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
                        if(networkInfo_.getType() == ConnectivityManager.TYPE_WIFI){ 
                            if ( networkInfo_.isConnected() ){
                                state_ = NET_STATE_WIFI_CONNECTED;
                            }else{
                                state_ = noConnectivity ? NET_STATE_DISCONNECTED : NET_STATE_WIFI_CONNECTED;
                            }
                        }else if(networkInfo_.getType() == ConnectivityManager.TYPE_MOBILE){
                            if (noConnectivity) {
                                state_ = NET_STATE_DISCONNECTED;
                            } else {
                                TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                                int type = telephonyManager.getNetworkType();
                                Log.e("ConnectivityBroadcastReceiver", "type= "+type);
                                state_ = getNetworkClass(type);
                            }
                        }else {
                            if (noConnectivity) {
                                state_ = NET_STATE_DISCONNECTED;
                            } else {
                                state_ = NET_STATE_UNKNOWN;
                            }
                        }
                    } 
                    NotifyEvent();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
    
            }
        };

    2.判断TYPE_MOBILE下的网络类型:

    private int getNetworkClass(int networkType) {  
            switch (networkType) {  
            case TelephonyManager.NETWORK_TYPE_GPRS:  
            case TelephonyManager.NETWORK_TYPE_EDGE:  
            case TelephonyManager.NETWORK_TYPE_CDMA:  
            case TelephonyManager.NETWORK_TYPE_1xRTT:  
            case TelephonyManager.NETWORK_TYPE_IDEN:  
                return NET_STATE_2G_CONNECTED;  
            case TelephonyManager.NETWORK_TYPE_UMTS:  
            case TelephonyManager.NETWORK_TYPE_EVDO_0:  
            case TelephonyManager.NETWORK_TYPE_EVDO_A:  
            case TelephonyManager.NETWORK_TYPE_HSDPA:  
            case TelephonyManager.NETWORK_TYPE_HSUPA:  
            case TelephonyManager.NETWORK_TYPE_HSPA:  
            case TelephonyManager.NETWORK_TYPE_EVDO_B:  
            case TelephonyManager.NETWORK_TYPE_EHRPD:  
            case TelephonyManager.NETWORK_TYPE_HSPAP:  
                return NET_STATE_3G_CONNECTED;  
            case TelephonyManager.NETWORK_TYPE_LTE:  
                return NET_STATE_4G_CONNECTED;  
            default:  
                return NET_STATE_UNKNOWN;  
            }  
        }  

    3.在AndroidManifest.xml中加上权限:

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

  • 相关阅读:
    Javascript高级程序设计-对象
    获取访问来源
    jQuery 序列化表单数据 serialize() serializeArray()
    Web用户的身份验证及WebApi权限验证流程的设计和实现
    Asp.Net WebAPI中Filter过滤器的使用以及执行顺序
    ASP.NET Web API 过滤器创建、执行过程(二)
    ASP.NET Web API 过滤器创建、执行过程(一)
    MVC和Web API 过滤器Filter
    在ASP.NET Core Web API上使用Swagger提供API文档
    Json常用组件
  • 原文地址:https://www.cnblogs.com/kelina2mark/p/4285722.html
Copyright © 2011-2022 走看看