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. ...
随机推荐
- lookup.go
{ continue } addr := net.JoinHostPort(lp.Info.BroadcastAddress, strconv. ...
- key.go
package].Key) if err = waitDelete(ctx, client, lastKey, resp.Header.Revision); err != nil { ...
- BZOJ_3669_[Noi2014]魔法森林_LCT
BZOJ_3669_[Noi2014]魔法森林_LCT Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节 ...
- Python多版本管理-pyenv
经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...
- Flask导入静态文件问题
然而如果使用flask开发web,并且需要在本地导入已经写好的css js 文件或者image一系列,这些文件是静态文件,需要另外建一个文件夹static;并且在html文件修改导入方法,exampl ...
- PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...
- 干货!分享一款windows下的磁盘分析神器。
作为开发人员的你,肯定遇到过这样的情况,120G SSD系统盘居然满载了,到底是被哪些程序占用了,包含哪些大文件,这个时候脑袋里就开始回忆了.....这对平时没有养成规范化记录安装软件好习惯的同学而言 ...
- python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
在学习python语言中用json库解析网络数据时,我遇到了两个编译错误:json.decoder.JSONDecodeError: Expecting property name enclosed ...
- 关于vue使用form上传文件
在vue中使用form表单上传文件文件的时候出现了一些问题,获取文件的时候一直返回null, 解决之后又出现发送到后台的file文件后台显示为空,解决源码 <template> <d ...
- 第4章 令牌端点(Token Endpoint) - IdentityModel 中文文档(v1.0.0)
令牌端点的客户端库(OAuth 2.0和OpenID Connect)作为HttpClient一组扩展方法提供.这允许HttpClient以您喜欢的方式创建和管理生命周期- 例如静态或通过像Micro ...