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.实现

package com.example.testss;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.NetworkInfo.State;import android.net.wifi.WifiManager;import android.os.Parcelable;import android.util.Log;public class NetworkConnectChangedReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 这个监听wifi的打开与关闭,与wifi的连接无关            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);            Log.e("H3c", "wifiState" + wifiState);            switch (wifiState) {            case WifiManager.WIFI_STATE_DISABLED:                break;            case WifiManager.WIFI_STATE_DISABLING:                break;            //            }        }        // 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager.WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。        // 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,当然刚打开wifi肯定还没有连接到有效的无线        if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {            Parcelable parcelableExtra = intent                    .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);            if (null != parcelableExtra) {                NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;                State state = networkInfo.getState();                boolean isConnected = state == State.CONNECTED;// 当然,这边可以更精确的确定状态                Log.e("H3c", "isConnected" + isConnected);                if (isConnected) {                } else {                }            }        }        // 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。.        // 最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log        // 这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {

ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo gprs = manager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifi = manager .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

Log.i(TAG, "网络状态改变:" + wifi.isConnected() + " 3g:" + gprs.isConnected());

NetworkInfo info = intent .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if (info != null) { Log.e("H3c", "info.getTypeName()" + info.getTypeName()); Log.e("H3c", "getSubtypeName()" + info.getSubtypeName()); Log.e("H3c", "getState()" + info.getState()); Log.e("H3c", "getDetailedState()" + info.getDetailedState().name()); Log.e("H3c", "getDetailedState()" + info.getExtraInfo()); Log.e("H3c", "getType()" + info.getType()); if (NetworkInfo.State.CONNECTED == info.getState()) { } else if (info.getType() == 1) { if (NetworkInfo.State.DISCONNECTING == info.getState()) { } } } } } }


更多相关文章

  1. Android获得屏幕高度和状态栏高度
  2. Android(安卓)通过Intent调用系统功能和Action动作和服务广播【
  3. android 发送短信的两种方式
  4. Android/Java面试题收集
  5. android中shape的使用(android:angle小解)
  6. Andoid - 开发实例(2): ViewPager卡片式界面2
  7. android wifi框架
  8. Android接收程序安装、替换、卸载广播
  9. Android(安卓)扫描SDCard上的音乐文件以及监听扫描事件

随机推荐

  1. 备份系统建设中的四个误区和六个错误
  2. Python自动化测试框架有哪些?
  3. 理化生数字化探究实验室建设方案
  4. GitLab将从微软Azure迁移到谷歌云平台GCP
  5. VMware推出VMware Kubernetes Engine:市场
  6. 紫微圣人的程序员人生第3回 [原创IT小说]
  7. 招聘-20210424-1:长期合同-居家办公全职英
  8. 日志易AIOps实践:日志数据大有用途
  9. 金融行业新核心系统建设及同城应用级双活
  10. 手把手教你vscode配置golang开发环境的步