WifiManager详解-wifi连接状态的监听

1.XML中声明

 <receiver android:name=".NetworkConnectChangedReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
                <action android:name="android.net.wifi.STATE_CHANGE" />
            </intent-filter>
        </receiver>

 

2.代码中注册

 IntentFilter filter = new IntentFilter();
 filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
 filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
 filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
 registerReceiver(new NetworkConnectChangedReceiver(), filter);

 

3.实现

[java]  view plain  copy
  1. package com.example.testss;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.net.ConnectivityManager;  
  7. import android.net.NetworkInfo;  
  8. import android.net.NetworkInfo.State;  
  9. import android.net.wifi.WifiManager;  
  10. import android.os.Parcelable;  
  11. import android.util.Log;  
  12.   
  13. public class NetworkConnectChangedReceiver extends BroadcastReceiver {  
  14.     @Override  
  15.     public void onReceive(Context context, Intent intent) {  
  16.         if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 这个监听wifi的打开与关闭,与wifi的连接无关  
  17.             int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);  
  18.             Log.e("H3c""wifiState" + wifiState);  
  19.             switch (wifiState) {  
  20.             case WifiManager.WIFI_STATE_DISABLED:  
  21.                 break;  
  22.             case WifiManager.WIFI_STATE_DISABLING:  
  23.                 break;  
  24.             //  
  25.             }  
  26.         }  
  27.         // 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。  
  28.         // 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线  
  29.         if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {  
  30.             Parcelable parcelableExtra = intent  
  31.                     .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);  
  32.             if (null != parcelableExtra) {  
  33.                 NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;  
  34.                 State state = networkInfo.getState();  
  35.                 boolean isConnected = state == State.CONNECTED;// 当然,这边可以更精确的确定状态  
  36.                 Log.e("H3c""isConnected" + isConnected);  
  37.                 if (isConnected) {  
  38.                 } else {  
  39.   
  40.                 }  
  41.             }  
  42.         }  
  43.         // 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。.  
  44.         // 最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log  
  45.         // 这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适  
  46.         if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {  
  47. <p> ConnectivityManager manager = (ConnectivityManager) context  
  48.     .getSystemService(Context.CONNECTIVITY_SERVICE);  
  49.       NetworkInfo gprs = manager  
  50.     .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
  51.       NetworkInfo wifi = manager  
  52.     .getNetworkInfo(ConnectivityManager.TYPE_WIFI);</p><p>    Log.i(TAG, "网络状态改变:" + wifi.isConnected() + " 3g:" + gprs.isConnected());</p><p>            NetworkInfo info = intent  
  53.                     .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);  
  54.             if (info != null) {  
  55.                 Log.e("H3c""info.getTypeName()" + info.getTypeName());  
  56.                 Log.e("H3c""getSubtypeName()" + info.getSubtypeName());  
  57.                 Log.e("H3c""getState()" + info.getState());  
  58.                 Log.e("H3c""getDetailedState()"  
  59.                         + info.getDetailedState().name());  
  60.                 Log.e("H3c""getDetailedState()" + info.getExtraInfo());  
  61.                 Log.e("H3c""getType()" + info.getType());  
  62.   
  63.                 if (NetworkInfo.State.CONNECTED == info.getState()) {  
  64.                 } else if (info.getType() == 1) {  
  65.                     if (NetworkInfo.State.DISCONNECTING == info.getState()) {  
  66.   
  67.                     }  
  68.                 }  
  69.             }  
  70.         }  
  71.     }  
  72. }</p>  
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值