Android 开发工具类 19_NetworkStateReceiver
检测网络状态改变类:
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的更多相关文章
- Android开发工具类
7种无须编程的DIY开发工具 你知道几个? 现如今,各种DIY开发工具不断的出现,使得企业和个人在短短几分钟内就能完成应用的创建和发布,大大节省了在时间和资金上的投入.此外,DIY工 具的出现,也帮助 ...
- android开发工具类之获得WIFI IP地址或者手机网络IP
有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...
- android开发工具类总结(一)
一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...
- Android 开发工具类 35_PatchUtils
增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...
- Android 开发工具类 13_ SaxService
网络 xml 解析方式 package com.example.dashu_saxxml; import java.io.IOException; import java.io.InputStream ...
- Android 开发工具类 06_NetUtils
跟网络相关的工具类: 1.判断网络是否连接: 2.判断是否是 wifi 连接: 3.打开网络设置界面: import android.app.Activity; import android.cont ...
- Android 开发工具类 03_HttpUtils
Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. import java.io.Bu ...
- Android 开发工具类 27_多线程下载大文件
多线程下载大文件时序图 FileDownloader.java package com.wangjialin.internet.service.downloader; import java.io.F ...
- Android 开发工具类 12_PullXmlTools
xml 格式数据 <?xml version="1.0" encoding="UTF-8"?> <user-list> <user ...
随机推荐
- BandwagonHost
https://kiwivm.64clouds.com/main-exec.php?mode=extras_shadowsocks https://kiwivm.64clouds.com/main-e ...
- 音频相关基本概念,音频处理及编解码基本框架和原理以及音、重采样、3A等音频处理(了解概念为主)
视频笔记:音频专业级分析软件(Cooledit) 音质定义以语音带宽来区分,采样率越高,带宽越大,则保真度越高,音质越好.窄带(8khz采样),宽带(16khz采样),CD音质(44.1khz采样) ...
- CF1097G Vladislav and a Great Legend
传送门 题目大意 一棵$n$个点的树,一个点集$S$的权值定义为把这个点击连成一个联通块的最少边数,求: $$ans=\sum_{S\in U}f(S)^k$$ 题解 这题跟gdoi那道题差不多 先把 ...
- CTF最简单的Web题
http://www.shiyanbar.com/ctf/1810 天网管理系统天网你敢来挑战嘛格式:ctf{ }解题链接: http://ctf5.shiyanbar.com/10/web1 查看源 ...
- 如何查看ubuntu系统版本信息
第一种方法: hadoop@master:~$ cat /proc/version Linux version 4.4.0-21-generic (buildd@lgw01-21):Linux内核版本 ...
- App间相互跳转及图片分享
A-app: Info--URL Types--URL Schemes:A-app(一个标识,允许别的app调用本App) info.plist 添加白名单: LSApplicationQueries ...
- Java_重载与重写
在java中,重载与重写都是多态的体现.重载(Overload)体现的是编译时多态,而重写(Override)体现了运行时多态. 重载(Overload): 定义:在一个类中,同名的方法如果有不同的参 ...
- vue font-icon 图标
1.vue 游览器左上角小图标 把.ico文件放在根目录下的static文件夹下,然后link标签引入 <link rel="shortcut icon" href=&quo ...
- [Codeforces Round #516][Codeforces 1063C/1064E. Dwarves, Hats and Extrasensory Abilities]
题目链接:1063C - Dwarves, Hats and Extrasensory Abilities/1064E - Dwarves, Hats and Extrasensory Abiliti ...
- 初识CUDA
如果问题规模较小,逻辑控制较为复杂,并行性很小优先使用CPU处理该问题,如果包含较大规模的数据处理,则考虑使用GPU进行处理. CPU上线程是重量级实体,可以开启1~32个线程,且上下文切换较为缓慢, ...