版权声明:本文为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【监听网路状态变化】的更多相关文章

  1. Android开发之使用广播监听网络状态变化

    我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...

  2. wx.onNetworkStatusChange(function (res) 监听网络状态变化 实践方案

    网络状态 · 小程序 https://developers.weixin.qq.com/miniprogram/dev/api/device.html#wxonnetworkstatuschangec ...

  3. HTML5判断设备在线离线及监听网络状态变化例子

    经测试android ipad默认的浏览器支持,用appcan封装的网页也支持 本文原创,转载请说明出处 <!doctype html> <html> <head> ...

  4. HTML5外包团队——技术分享:HTML5判断设备在线离线及监听网络状态变化例子

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  5. XMPP通讯开发-服务器好友获取以及监听状态变化

    在 XMPP通讯开发-好友获取界面设计   我们设计了放QQ的列表功能,这里我们获取我们服务器上的 数据. 这一部分知识我们可以查看smack_3_3_0/smack_3_3_0/documentat ...

  6. 用BroadcastReceiver监听手机网络状态变化

    android--解决方案--用BroadcastReceiver监听手机网络状态变化 标签: android网络状态监听方案 2015-01-20 15:23 1294人阅读 评论(3) 收藏 举报 ...

  7. iOS 使用AFNetWorking监听APP网络状态变化(可用于更改缓存策略、提示网络等)

    前言 我们知道在APP开发过程中.监听手机当前的网络状态还是一个非经常常使用的方法,这里我来为大家接受一种使用AFNetWorking来监听当前的网络状态的方法:网络监听对程序开发的帮助有非常多:比方 ...

  8. Android 网络状态变化的监听

    1.在流量网页,时实现断网,提醒等功能. 需要权限 <uses-permission android:name="android.permission.INTERNET"/& ...

  9. 监听SD卡状态

     最近在做项目时遇到需要处理SD卡拔出时的监听,在网上找了很多资料.总结了一下, 用接收广播处理最有效率     sd卡拔插时会发送广播,具体如下(摘自一位大虾的博客  来自:http://blog. ...

随机推荐

  1. 有趣的toggleClass实现交替样式

    addClass和removeClass进行样式类型的修改相信比较容易学习和接受 但是用这两个方法去实现交替样式,像一些<li>列表的样式,还有同类型数据的呈现, 当然很多框架都给出了封装 ...

  2. []T 还是 []*T, 这是一个问题

    全面分析Go语言中的类型和类型指针的抉择 目录 [−] 副本的创建 T的副本创建 *T的副本创建 如何选择 T 和 *T 什么时候发生副本创建 最常见的case map.slice和数组 for-ra ...

  3. bzoj5251 [2018多省省队联测]劈配

    直接网络流模拟即可AC. 可持久化+暴力=90分, 可持久化+二分=30分, 暴力加边+二分=100分. 我也很无奈啊. Ivan便涨红了脸,额上的青筋条条绽出,争辩道,“memcpy也是可持久化…… ...

  4. nodejs-5.2 axios请求

    1.npm官方文档:https://www.npmjs.com/package/axios 2.axios:用于 浏览器 和 node.js的基于Promise的HTTP客户端 请求 特征 从浏览器制 ...

  5. 深入理解Java 栈数据结构

    栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈 ...

  6. Unix中的I/O模型

    本文所指的I/O均是网络I/O. 一. POSIX对同步.异步I/O的定义 我们先大致看看POSIX对同步.异步的定义,不用细究,重点看我标红的部分就行. 同步I/O会导致请求进程阻塞,直到I/O操作 ...

  7. kolla 多节点部署 openstack

    kolla 介绍 简介 kolla 的使命是为 openstack 云平台提供生产级别的.开箱即用的交付能力.kolla 的基本思想是一切皆容器,将所有服务基于 Docker 运行,并且保证一个容器只 ...

  8. ASP.NET Core 实战:构建带有版本控制的 API 接口

    一.前言 在上一篇的文章中,主要是搭建了我们的开发环境,同时创建了我们的项目模板框架.在整个前后端分离的项目中,后端的 API 接口至关重要,它是前端与后端之间进行沟通的媒介,如何构建一个 “好用” ...

  9. 只有一百行的xss扫描工具——DSXS源码分析

    目录 0x00 废话 0x01 扫描逻辑 第一个逻辑:dom型xss 第二个逻辑:经过后端的xss 0x02 总结 0x00 废话 DSXS是一个只有一百行代码的xss扫描器,其作者刚好就是写sqlm ...

  10. 为什么我的会话状态在ASP.NET Core中不工作了?

    原文:Why isn't my session state working in ASP.NET Core? Session state, GDPR, and non-essential cookie ...