检测网络状态改变类:

1、注册网络状态广播;

2、检查网络状态;

3、注销网络状态广播;

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

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

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

 import java.util.ArrayList;

 import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log; import com.example.androidnetworkdemo.observer.NetChangeObserver;
import com.example.androidnetworkdemo.utils.NetWorkUtil;
import com.example.androidnetworkdemo.utils.NetWorkUtil.NetType; /**
* 是一个检测网络状态改变的,需要配置
* <receiver android:name="com.osrad.common.receiver.OSNetworkStateReceiver" >
* <intent-filter>
* <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
* <action android:name="os.android.net.conn.CONNECTIVITY_CHANGE" />
* </intent-filter>
* </receiver>
* 需要开启权限 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
* <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
* <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
* <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
*/
public class NetworkStateReceiver extends BroadcastReceiver { private static Boolean networkAvailable = false;
private static NetType netType;
private static ArrayList<NetChangeObserver> netChangeObserverArrayList = new ArrayList<NetChangeObserver>();
private final static String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
public final static String OS_ANDROID_NET_CHANGE_ACTION = "os.android.net.conn.CONNECTIVITY_CHANGE";
private static BroadcastReceiver receiver; private static BroadcastReceiver getReceiver() {
if (receiver == null) {
receiver = new NetworkStateReceiver();
}
return receiver;
} @Override
public void onReceive(Context context, Intent intent) {
receiver = NetworkStateReceiver.this;
if (intent.getAction().equalsIgnoreCase(ANDROID_NET_CHANGE_ACTION) || intent.getAction().equalsIgnoreCase(OS_ANDROID_NET_CHANGE_ACTION)) {
if (!NetWorkUtil.isNetworkAvailable(context)) {
networkAvailable = false;
} else {
netType = NetWorkUtil.getAPNType(context);
networkAvailable = true;
}
notifyObserver();
}
} /**
* 注册网络状态广播
*
* @param mContext
*/
public static void registerNetworkStateReceiver(Context mContext) { IntentFilter filter = new IntentFilter();
filter.addAction(OS_ANDROID_NET_CHANGE_ACTION);
filter.addAction(ANDROID_NET_CHANGE_ACTION);
mContext.getApplicationContext().registerReceiver(getReceiver(), filter);
} /**
* 检查网络状态
*
* @param mContext
*/
public static void checkNetworkState(Context mContext) { Intent intent = new Intent();
intent.setAction(OS_ANDROID_NET_CHANGE_ACTION);
mContext.sendBroadcast(intent);
} /**
* 注销网络状态广播
*
* @param mContext
*/
public static void unRegisterNetworkStateReceiver(Context mContext) {
if (receiver != null) {
try {
mContext.getApplicationContext().unregisterReceiver(receiver);
} catch (Exception e) {
Log.d(NetworkStateReceiver.class.getName(), e.getMessage());
}
} } /**
* 获取当前网络状态,true为网络连接成功,否则网络连接失败
*
* @return
*/
public static Boolean isNetworkAvailable() {
return networkAvailable;
} public static NetType getAPNType() {
return netType;
} private void notifyObserver() { for (int i = 0; i < netChangeObserverArrayList.size(); i++) {
NetChangeObserver observer = netChangeObserverArrayList.get(i);
if (observer != null) {
if (isNetworkAvailable()) {
observer.onNetConnect(netType);
} else {
observer.onNetDisconnect();
}
}
}
} /**
* 注册网络连接观察者
*
* @param observer 观察者实例
*/
public static void registerObserver(NetChangeObserver observer) {
if (netChangeObserverArrayList == null) {
netChangeObserverArrayList = new ArrayList<NetChangeObserver>();
}
netChangeObserverArrayList.add(observer);
} /**
* 注销网络连接观察者
*
* @param observer 观察者实例
*/
public static void removeRegisterObserver(NetChangeObserver observer) {
if (netChangeObserverArrayList != null) {
netChangeObserverArrayList.remove(observer);
}
} }

检测网络改变的观察者

 import com.example.androidnetworkdemo.utils.NetWorkUtil.NetType;

 /**
* 是检测网络改变的观察者
*/
public interface NetChangeObserver
{
/**
* 网络连接连接时调用
*/
public void onNetConnect(NetType type); /**
* 当前没有网络连接
*/
public void onNetDisconnect();
}

调用示例

 public class BaseApplication extends Application {

     private NetChangeObserver changeObserver = null;

     public static Activity currentActivity;

     @Override
public void onCreate() {
super.onCreate();
// 做初始化操作
doOnCreate();
} /**
* 此方法做初始化操作
*/
private void doOnCreate() {
// 声明observer注册到网络状态广播接收器中
changeObserver = new NetChangeObserver() {
@Override
public void onNetConnect(NetType type) {
BaseApplication.this.onNetConnect(type);
} @Override
public void onNetDisconnect() {
BaseApplication.this.onNetDisconnect();
}
};
// 注册网络状态监听对象
NetworkStateReceiver.registerObserver(changeObserver);
} /**
* 当前没有网络连接
*/
public void onNetDisconnect() {
if (currentActivity != null && currentActivity instanceof BaseActivity) {
((BaseActivity)currentActivity).onNetDisconnect();
}
} /**
* 网络连接连接时调用
*/
protected void onNetConnect(NetType type) {
if (currentActivity != null && currentActivity instanceof BaseActivity) {
((BaseActivity)currentActivity).onNetConnect(type);
}
} }

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

  1. Android开发工具类

    7种无须编程的DIY开发工具 你知道几个? 现如今,各种DIY开发工具不断的出现,使得企业和个人在短短几分钟内就能完成应用的创建和发布,大大节省了在时间和资金上的投入.此外,DIY工 具的出现,也帮助 ...

  2. android开发工具类之获得WIFI IP地址或者手机网络IP

    有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...

  3. android开发工具类总结(一)

    一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...

  4. Android 开发工具类 35_PatchUtils

    增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...

  5. Android 开发工具类 13_ SaxService

    网络 xml 解析方式 package com.example.dashu_saxxml; import java.io.IOException; import java.io.InputStream ...

  6. Android 开发工具类 06_NetUtils

    跟网络相关的工具类: 1.判断网络是否连接: 2.判断是否是 wifi 连接: 3.打开网络设置界面: import android.app.Activity; import android.cont ...

  7. Android 开发工具类 03_HttpUtils

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

  8. Android 开发工具类 27_多线程下载大文件

    多线程下载大文件时序图 FileDownloader.java package com.wangjialin.internet.service.downloader; import java.io.F ...

  9. Android 开发工具类 12_PullXmlTools

    xml 格式数据 <?xml version="1.0" encoding="UTF-8"?> <user-list> <user ...

随机推荐

  1. python文件的路径问题补充上一篇内容

    上次的路径问题还没解决就被勒索病毒的木马器给搞了两周多, 拖拖拖到现在又开始纠结路径问题...还是学习能力不足啊... 补充一下路径问题的知识, 毕竟jupyter notebook跟IDE测试的时候 ...

  2. less 命令翻页键

    less 是linux快速浏览文件的命令(防止 误修改文件)  less主要就是 浏览文件 查找文件 浏览文件涉及到的就是上下翻页 具体翻页的按键如下表 less 向上翻页 向下翻页 一页 b (ba ...

  3. ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)

    1.RGB为何要转换为YCbCr,历史遗留问题! 一般一个技术如果为了保证原有的设备可以继续使用,就需要兼容以前的技术.黑白电视到彩色电视的进化就是转换为YCbCr的原因,同时YCbCr比RGB传输占 ...

  4. 页面跳转之session

    题意:设主页为index.jsp 通过session将index.jsp中的信息传送给结果页面result.jsp.(其实,session的生命周期是整个服务器开启过程,具体不做详细介绍).这个 其实 ...

  5. 关于resharper激活

    resharper 是一款非常强大的vs辅助开发插件,提供了很多快捷操作功能,本人已经离不开它了,但是resharper总会遇到lincese过期,需要激活的问题,现在提供以下方式,仅供参考 1.打开 ...

  6. VB6进行GZIP解压&C#进行GZIP压缩和解压

    VB进行GZIP解压的,DLL是系统的,如果没有 [点击下载] Option Explicit 'GZIP API '----------------------------------------- ...

  7. 基于Jmeter的thrift-RPC接口测试

    根据需求,产品部分功能采用thrift-RPC协议进行接口的增.删.改.查,前期采用Junit对其进行测试,为了提高RPC接口测试的简洁化和后期的性能测试需求,打算通过Jmeter的java类测试实现 ...

  8. selenium webdriver定位不到元素的五种原因及解决办法

    1.动态id定位不到元素 for example:        //WebElement xiexin_element = driver.findElement(By.id("_mail_ ...

  9. Openssl的证书操作

    先假设自己是一个CA,而且是一个root CA,Cliu8CA 生成一个CA的private key openssl genrsa -out caprivate.key 1024 当然可以跟密码 op ...

  10. 安卓开发学习笔记(五):史上最简单且华丽地实现Android Stutio当中Webview控件https/http协议的方法

    一.我们先在XML当中自定义一个webview(Second_layout.xml) 代码如下: <?xml version="1.0" encoding="utf ...