NetStateReceiver【监听网路状态变化】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
用来监控网络变化时的处理,一般用来toast提示或者扩展为其他作用。
效果图

代码分析
NetStateReceiver:网络改变时的广播器
NetUtils:获取网络类型
使用步骤
一、项目组织结构图

注意事项:
1、导入类文件后需要change包名以及重新import R文件路径
2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
将netstatus包复制到项目中

在AndroidManifest.xml文件中声明权限以及静态注册NetStateReceiver【注意,路径需要跟实际项目的路径保持一致】
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.why.project.netstatereceiverdemo"> <!-- ======================NetStateReceiver相关========================== -->
<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" /> <application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity> <!-- ===========NetStateReceiver相关=====也可以使用动态注册在MyApplication,不过需要注意注销的触发时机=============== -->
<receiver android:name=".utils.netstatus.NetStateReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="os.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
</application> </manifest>
在BaseActivity.java中添加以下代码
package com.why.project.netstatereceiverdemo; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; import com.why.project.netstatereceiverdemo.utils.ToastUtil;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetChangeObserver;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetStateReceiver;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetUtils; /**
* Created by HaiyuKing
* Used Activity基类
*/ public abstract class BaseActivity extends AppCompatActivity { private static final String TAG = "BaseActivity"; /*=================网络变化的广播器=====================*/
protected NetChangeObserver mNetChangeObserver; @Override
protected void onCreate(Bundle savedInstanceState) { /*=================网络变化的广播器=====================*/
registerNetStateChange();//注册网络变化的广播器 super.onCreate(savedInstanceState);
} protected void onDestroy() {
super.onDestroy();
/*=================网络变化的广播器=====================*/
NetStateReceiver.removeRegisterObserver(this.mNetChangeObserver);
} /*==========网络变化的广播器=============*/
private void registerNetStateChange() {
if (this.mNetChangeObserver == null) {
this.mNetChangeObserver = new NetChangeObserver() {
public void onNetConnected(NetUtils.NetType netType) {
super.onNetConnected(netType);
onNetworkConnected(netType);
if (NetUtils.isMobileConnected(getApplicationContext())){
ToastUtil.showShortToast("您当前正在使用运营商网络");
}
if(NetUtils.isWifiConnected(getApplicationContext())){
ToastUtil.showShortToast("您当前正在使用无线网络");
}
} public void onNetDisConnect() {
super.onNetDisConnect();
onNetworkDisConnected();
ToastUtil.showShortToast("网络无法连接,请检查网络设置");
}
};
NetStateReceiver.registerObserver(this.mNetChangeObserver);// 声明mNetChangeObserver注册到网络状态广播接收器中
}
}
protected abstract void onNetworkConnected(NetUtils.NetType netType);
protected abstract void onNetworkDisConnected(); }
本Demo搭配《ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】》使用
三、使用方法
package com.why.project.netstatereceiverdemo;
import android.os.Bundle;
import com.why.project.netstatereceiverdemo.utils.netstatus.NetUtils;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onNetworkConnected(NetUtils.NetType netType) {
}
@Override
protected void onNetworkDisConnected() {
}
}
混淆配置
无
参考资料
http://www.cnblogs.com/renzimu/p/4537954.html
http://www.cnblogs.com/renzimu/p/4537936.html
项目demo下载地址
https://github.com/haiyuKing/NetStateReceiverDemo
NetStateReceiver【监听网路状态变化】的更多相关文章
- Android开发之使用广播监听网络状态变化
我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...
- wx.onNetworkStatusChange(function (res) 监听网络状态变化 实践方案
网络状态 · 小程序 https://developers.weixin.qq.com/miniprogram/dev/api/device.html#wxonnetworkstatuschangec ...
- HTML5判断设备在线离线及监听网络状态变化例子
经测试android ipad默认的浏览器支持,用appcan封装的网页也支持 本文原创,转载请说明出处 <!doctype html> <html> <head> ...
- HTML5外包团队——技术分享:HTML5判断设备在线离线及监听网络状态变化例子
<!doctype html> <html> <head> <meta http-equiv="content-type" content ...
- XMPP通讯开发-服务器好友获取以及监听状态变化
在 XMPP通讯开发-好友获取界面设计 我们设计了放QQ的列表功能,这里我们获取我们服务器上的 数据. 这一部分知识我们可以查看smack_3_3_0/smack_3_3_0/documentat ...
- 用BroadcastReceiver监听手机网络状态变化
android--解决方案--用BroadcastReceiver监听手机网络状态变化 标签: android网络状态监听方案 2015-01-20 15:23 1294人阅读 评论(3) 收藏 举报 ...
- iOS 使用AFNetWorking监听APP网络状态变化(可用于更改缓存策略、提示网络等)
前言 我们知道在APP开发过程中.监听手机当前的网络状态还是一个非经常常使用的方法,这里我来为大家接受一种使用AFNetWorking来监听当前的网络状态的方法:网络监听对程序开发的帮助有非常多:比方 ...
- Android 网络状态变化的监听
1.在流量网页,时实现断网,提醒等功能. 需要权限 <uses-permission android:name="android.permission.INTERNET"/& ...
- 监听SD卡状态
最近在做项目时遇到需要处理SD卡拔出时的监听,在网上找了很多资料.总结了一下, 用接收广播处理最有效率 sd卡拔插时会发送广播,具体如下(摘自一位大虾的博客 来自:http://blog. ...
随机推荐
- 如何查看selenium的版本号
方法一: 打开cmd,输入python >>> import selenium >>> help(selenium) Help on package seleniu ...
- 深入js隐式类型转换
前言 相信刚开始了解js的时候,都会遇到 2 =='2',但是 1+'2' == '1'+'2'为false的情况,这时候应该会是一脸懵逼的状态,不得不感慨js弱类型的灵活让人发指,隐式类型转换就是这 ...
- go语言nsq源码解读六 tcp.go、tcp_server.go
本篇讲nsqlookupd中tcp.go.tcp_server.go tcp_server.go位于util目录下. 12345678910111213141516171819202122232425 ...
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
n>=m,所以就变成了求 ϕ(m!)∗n!/m! 而 ϕ(m!)=m!∗(p−1)/p...... p为m!的素因子,即为m内的所有素数,问题就转化为了求 n!∗(p−1)/p...... 只需 ...
- BZOJ_3238_[Ahoi2013]差异_后缀自动机
BZOJ_3238_[Ahoi2013]差异_后缀自动机 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sam ...
- Python初学者必看(1)
python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...
- 虚拟机console基础环境部署——配置本地YUM源
1. CD/ROM装载系统镜像2. 挂载设备3. 配置本地源4. 总结 有关YUM源及Linux系统三大软件管理方式,参照博客<CentOS系统三大软件管理>,笔记内链:CentOS系统三 ...
- Java开发者必备的10大学习网站,送给入门学习java的你,请收下!
作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站.以下本人收集的 Java 开发者必备的网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题 ...
- java代码之美(12)---CollectionUtils工具类
java代码之美(12)---CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUt ...
- 01-java前言、入门程序、变量、常量
今日目标 能够计算二进制和十进制数之间的互转 能够使用常见的DOS命令 理解Java语言的跨平台实现原理 jvm是运行java程序的假想计算机,所有的java程序都运行在它上面.java编写的软件可以 ...