Android 开发工具类 19_NetworkStateReceiver

检测网络状态改变类:

1、注册网络状态广播;

2、检查网络状态;

3、注销网络状态广播;

4、获取当前网络状态,true为网络连接成功,否则网络连接失败;

5、注册网络连接观察者;

6、注销网络连接观察者。

  1 import java.util.ArrayList;
  2
  3 import android.content.BroadcastReceiver;
  4 import android.content.Context;
  5 import android.content.Intent;
  6 import android.content.IntentFilter;
  7 import android.util.Log;
  8
  9 import com.example.androidnetworkdemo.observer.NetChangeObserver;
 10 import com.example.androidnetworkdemo.utils.NetWorkUtil;
 11 import com.example.androidnetworkdemo.utils.NetWorkUtil.NetType;
 12
 13 /**
 14  * 是一个检测网络状态改变的,需要配置
 15  *         <receiver android:name="com.osrad.common.receiver.OSNetworkStateReceiver" >
 16  *          <intent-filter>
 17  *              <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
 18  *              <action android:name="os.android.net.conn.CONNECTIVITY_CHANGE" />
 19  *          </intent-filter>
 20  *      </receiver>
 21  * 需要开启权限       <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 22  *              <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 23  *              <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 24  *              <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 25  */
 26 public class NetworkStateReceiver extends BroadcastReceiver {
 27
 28     private static Boolean networkAvailable = false;
 29     private static NetType netType;
 30     private static ArrayList<NetChangeObserver> netChangeObserverArrayList = new ArrayList<NetChangeObserver>();
 31     private final static String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
 32     public final static String OS_ANDROID_NET_CHANGE_ACTION = "os.android.net.conn.CONNECTIVITY_CHANGE";
 33     private static BroadcastReceiver receiver;
 34
 35     private static BroadcastReceiver getReceiver() {
 36         if (receiver == null) {
 37             receiver = new NetworkStateReceiver();
 38         }
 39         return receiver;
 40     }
 41
 42     @Override
 43     public void onReceive(Context context, Intent intent) {
 44         receiver = NetworkStateReceiver.this;
 45         if (intent.getAction().equalsIgnoreCase(ANDROID_NET_CHANGE_ACTION) || intent.getAction().equalsIgnoreCase(OS_ANDROID_NET_CHANGE_ACTION)) {
 46             if (!NetWorkUtil.isNetworkAvailable(context)) {
 47                 networkAvailable = false;
 48             } else {
 49                 netType = NetWorkUtil.getAPNType(context);
 50                 networkAvailable = true;
 51             }
 52             notifyObserver();
 53         }
 54     }
 55
 56     /**
 57      * 注册网络状态广播
 58      *
 59      * @param mContext
 60      */
 61     public static void registerNetworkStateReceiver(Context mContext) {
 62
 63         IntentFilter filter = new IntentFilter();
 64         filter.addAction(OS_ANDROID_NET_CHANGE_ACTION);
 65         filter.addAction(ANDROID_NET_CHANGE_ACTION);
 66         mContext.getApplicationContext().registerReceiver(getReceiver(), filter);
 67     }
 68
 69     /**
 70      * 检查网络状态
 71      *
 72      * @param mContext
 73      */
 74     public static void checkNetworkState(Context mContext) {
 75
 76         Intent intent = new Intent();
 77         intent.setAction(OS_ANDROID_NET_CHANGE_ACTION);
 78         mContext.sendBroadcast(intent);
 79     }
 80
 81     /**
 82      * 注销网络状态广播
 83      *
 84      * @param mContext
 85      */
 86     public static void unRegisterNetworkStateReceiver(Context mContext) {
 87         if (receiver != null) {
 88             try {
 89                 mContext.getApplicationContext().unregisterReceiver(receiver);
 90             } catch (Exception e) {
 91                 Log.d(NetworkStateReceiver.class.getName(), e.getMessage());
 92             }
 93         }
 94
 95     }
 96
 97     /**
 98      * 获取当前网络状态,true为网络连接成功,否则网络连接失败
 99      *
100      * @return
101      */
102     public static Boolean isNetworkAvailable() {
103         return networkAvailable;
104     }
105
106     public static NetType getAPNType() {
107         return netType;
108     }
109
110     private void notifyObserver() {
111
112         for (int i = 0; i < netChangeObserverArrayList.size(); i++) {
113             NetChangeObserver observer = netChangeObserverArrayList.get(i);
114             if (observer != null) {
115                 if (isNetworkAvailable()) {
116                     observer.onNetConnect(netType);
117                 } else {
118                     observer.onNetDisconnect();
119                 }
120             }
121         }
122     }
123
124     /**
125      * 注册网络连接观察者
126      *
127      * @param observer 观察者实例
128      */
129     public static void registerObserver(NetChangeObserver observer) {
130         if (netChangeObserverArrayList == null) {
131             netChangeObserverArrayList = new ArrayList<NetChangeObserver>();
132         }
133         netChangeObserverArrayList.add(observer);
134     }
135
136     /**
137      * 注销网络连接观察者
138      *
139      * @param observer 观察者实例
140      */
141     public static void removeRegisterObserver(NetChangeObserver observer) {
142         if (netChangeObserverArrayList != null) {
143             netChangeObserverArrayList.remove(observer);
144         }
145     }
146
147 }

检测网络改变的观察者

 1 import com.example.androidnetworkdemo.utils.NetWorkUtil.NetType;
 2
 3 /**
 4  *  是检测网络改变的观察者
 5  */
 6 public interface NetChangeObserver
 7 {
 8     /**
 9      * 网络连接连接时调用
10      */
11     public void onNetConnect(NetType type);
12
13     /**
14      * 当前没有网络连接
15      */
16     public void onNetDisconnect();
17 }

调用示例

 1 public class BaseApplication extends Application {
 2
 3     private NetChangeObserver changeObserver = null;
 4
 5     public static Activity currentActivity;
 6
 7     @Override
 8     public void onCreate() {
 9         super.onCreate();
10         // 做初始化操作
11         doOnCreate();
12     }
13
14     /**
15      * 此方法做初始化操作
16      */
17     private void doOnCreate() {
18         // 声明observer注册到网络状态广播接收器中
19         changeObserver = new NetChangeObserver() {
20             @Override
21             public void onNetConnect(NetType type) {
22                 BaseApplication.this.onNetConnect(type);
23             }
24
25             @Override
26             public void onNetDisconnect() {
27                 BaseApplication.this.onNetDisconnect();
28             }
29         };
30         // 注册网络状态监听对象
31         NetworkStateReceiver.registerObserver(changeObserver);
32     }
33
34     /**
35      * 当前没有网络连接
36      */
37     public void onNetDisconnect() {
38         if (currentActivity != null && currentActivity instanceof BaseActivity) {
39             ((BaseActivity)currentActivity).onNetDisconnect();
40         }
41     }
42
43     /**
44      * 网络连接连接时调用
45      */
46     protected void onNetConnect(NetType type) {
47         if (currentActivity != null && currentActivity instanceof BaseActivity) {
48             ((BaseActivity)currentActivity).onNetConnect(type);
49         }
50     }
51
52 }
时间: 2024-08-07 16:08:03

Android 开发工具类 19_NetworkStateReceiver的相关文章

android开发工具类总结(一)

一.日志工具类 Log.java 1 public class L 2 { 3 private L() 4 { 5 /* 不可被实例化 */ 6 throw new UnsupportedOperationException("Cannot be instantiated!"); 7 } 8 // 是否需要打印bug,可以在application的onCreate函数里面初始化 9 public static boolean isDebug = true; 10 private sta

Android 开发工具类 13_ SaxService

网络 xml 解析方式 1 package com.example.dashu_saxxml; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.HashMap; 6 import java.util.List; 7 8 import javax.xml.parsers.SAXParser; 9 import javax.xml.parsers.SAXParserFactory; 10

Android 开发工具类 35_PatchUtils

增量更新工具类[https://github.com/cundong/SmartAppUpdates] 1 import java.io.File; 2 3 import android.app.Activity; 4 import android.app.ProgressDialog; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.net.Uri; 8 import and

Android开发工具类之DownloadManagerPro

这个工具类就是Android系统下载管理DownloadManager的一个增强类,提供了一些增强方法.或许大家不太了解这个安卓系统自带的DownloadManager这个类,我先做一个简单介绍吧.DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request. DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息.用d

Android 开发工具类 03_HttpUtils

Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. 1 import java.io.BufferedReader; 2 import java.io.ByteArrayOutputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.InputStreamReader

Android 开发工具类 10_Toast 统一管理类

Toast 统一管理类: 1.短时间显示Toast: 2.长时间显示 Toast: 3.自定义显示 Toast 时间. 1 import android.content.Context; 2 import android.widget.Toast; 3 4 // Toast 统一管理类 5 public class T 6 { 7 8 private T() 9 { 10 /* cannot be instantiated */ 11 throw new UnsupportedOperation

Android 开发工具类 09_SPUtils

SharedPreferences 辅助类: 1.保存在手机里面的文件名: 2.保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法: 3.得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值: 4.移除某个 key 值已经对应的值: 5.清除所有数据: 6.查询某个 key 是否已经存在: 7.返回所有的键值对: 8.创建一个解决 SharedPreferencesCompat.apply 方法的一个兼容类: 1 import jav

Android 开发工具类 33_开机自运行

原理:该类派生自 BroadcastReceiver,重载方法 onReceive ,检测接收到的 Intent 是否符合 BOOT_COMPLETED,如果符合,则启动用户Activity. 1 import android.content.BroadcastReceiver; 2 import android.content.Context; 3 import android.content.Intent; 4 5 public class BootBroadcastReceiver ext

Android 开发工具类 31_WebService 获取手机号码归属地

AndroidInteractWithWebService.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12=