Android 网络状态实时检测
原文(参考学习):https://blog.csdn.net/mxiaoyem/article/details/50708052
在网络上看到了该文章,讲的是如何实时监测网络状态, 本人菜鸟一枚,学习该文章,照着代码敲. 感谢该博主的无私分享。
1. 在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. 新建工具类
public class NetUtil {/*** 没有连接网络*/private static final int NETWORK_NONE = -1;/*** 移动网络*/private static final int NETWORK_MOBILE = 0;/*** 无线网络*/private static final int NETWORK_WIFI = 1;public static int getNetWorkState(Context context) {// 得到连接管理器对象ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {return NETWORK_WIFI;} else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {return NETWORK_MOBILE;}} else {return NETWORK_NONE;}return NETWORK_NONE;}
}
4. 建立接收器
public class NetBroadcastReceiver extends BroadcastReceiver {public NetEvent event= BaseActivity.event;@Overridepublic void onReceive(Context context, Intent intent) {// 如果相等的话就说明网络状态发生了变化if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {int netWorkState = NetUtil.getNetWorkState(context);// 接口回调传过去状态的类型event.onNetChange(netWorkState);}}//自定义网络切换接口public interface NetEvent {public void onNetChange(int netMobile);}}
由于我自己的测试机子是Android 8.0, 我在接下来的BaseActivity中,采取动态注册,看了原博主的文章,Android 7.0(含)以上需要动态注册,如果是低于这个版本,需要在AndroidManifest.xml添加如下代码, 我的设备是Android 8.0, 就没有添加了。
<receiver android:name="cn.broadcastreceiver.NetBroadcastReceiver" ><intent-filter><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /></intent-filter></receiver>
4. 定义抽象基类BaseActivity当中,进行实现
public abstract class BaseActivity extends AppCompatActivity implements NetBroadcastReceiver.NetEvent
在BaseActivity当中,定义
public NetBroadcastReceiver netBroadcastReceiver;public static NetBroadcastReceiver.NetEvent event;private int netMobile;
在onCreate当中,进行接收器动态注册:
event= this;//实例化IntentFilter对象IntentFilter filter = new IntentFilter();filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");netBroadcastReceiver = new NetBroadcastReceiver();registerReceiver(netBroadcastReceiver, filter);
在onDestroy当中释放
unregisterReceiver(netBroadcastReceiver);
添加处理方法
public boolean inspectNet() {this.netMobile = NetUtil.getNetWorkState(BaseActivity.this);return isNetConnect();}/*** 判断有无网络 。** @return true 有网, false 没有网络.*/public boolean isNetConnect() {if (netMobile == 1) {return true;} else if (netMobile == 0) {return true;} else if (netMobile == -1) {return false;}return false;}
5. 由于BaseActivity是一个抽象类,虽然实现了NetBroadcastReceiver.NetEvent, 但是并无实现方法。 由BaseActivity的子类实现。比如InitActivity继承BaseActivity,
public class InitActivity extends BaseActivity
由InitActivity中实现onNetChange方法, 当在InitActivity对应布局时,网络变化时,会自动触发该事件,我定义了一个变量特地用来存储网络状态, 用于之后的逻辑判断使用.
@Overridepublic void onNetChange(int netMobile) {MyApplication.NET_STATUS= netMobile;}
此时可能会发现, 这样做的话,需要在每一个BaseActivity的子类都要实现这个方法,会比较繁琐。那么BaseActivity就不能写成抽象类, 直接在BaseActivity实现就可以了。以后会注意。
特此记录下使用, 方便以后使用。
Android 网络状态实时检测相关推荐
- 如何消除原生Android,如何消除原生Android网络状态上的惊叹号
喜欢使用原生Android系统的朋友可能会发现自己的状态栏信号图标上经常有一个惊叹号标志. 这是怎么回事呢?原因是Android为了对网络状态进行检测,采用了一种叫做captive detection ...
- linux获取交换机端口信息,基于Linux的端口状态实时检测方法、电路和交换机与流程...
技术特征: 1.一种基于linux的端口状态实时检测方法,其特征在于,所述方法包括: 接收外部信号接口芯片phy上报的中断信号,该中断信号是每个所述phy在自身对应的端口的状态发生改变时,产生并上报的 ...
- 【前端工程化】使用轮询的方式,监控网络状态,检测是否断网
在我们的项目中会有监控网络状态的要求,比如断网了,那就给一个断网提示,常见的方法是使用navigator.onLine 这个方法 但是有的时候这个也不准,所以我们可以这样做,增加一个接口,在项目中轮询 ...
- android开机耳机检测,android耳机状态的检测
在android检测耳机的状态,比如耳机的插入或拔出等是比较容易的.主要是对系统广播的接收和处理. 工作原理: android系统在耳机插入和拔出的时候都会发送广播,所以我们要想检测耳机的状态只需要注 ...
- iOS开发(OC)——网络状态的检测
cocoapods导入pod 'FreeStreamer' 引入头文件Reachability.h Reachability *r= [Reachability reachabilityForInte ...
- Android 网络状态的监控
1 http://www.cnblogs.com/qingblog/archive/2012/07/19/2598983.html 2 转载于:https://www.cnblogs.com/bava ...
- 【Android App】人脸识别中借助摄像头和OpenCV实时检测人脸讲解及实战(附源码和演示 超详细)
需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.借助摄像头实时检测人脸 与Android自带的人脸检测器相比,OpenCV具备更强劲的人脸识别功能,它可以通过摄像头实时检测人脸,实时检测的预览空 ...
- Android实时监听网络状态
Android开发实时监听网络状态变化一般有两种方法: 1. 新建一个基类BasicActivity.class,在基类中注册网络监听广播NetworkChangeReceiver.class,所有页 ...
- Android移动开发检测网络状态并使用BroadcastReceiver(广播接收者)进行接收网络变化的后续处理
在Android开发中,许多功能需要网络连接,所以在开发过程中需要进行手机网络的检测.而每做一个App,就要进行检测,那么我直接将检测网络状态的功能封装成一个类. 检测网络状态所需要的Api: Con ...
最新文章
- 1114. Family Property (25)
- 8.使用hydra对端口进行爆破
- [转]自动驾驶基础--路径规划
- 互联网产品用户体验设计的三大定律
- spring-security3 配置和使用
- 【优化算法】多目标水母搜索优化算法 (MOJS) 【含Matlab源码 248期】
- 【项目实战一】基于人工神经网络ANN的车牌识别
- Windows XP/2000/Vista/7/8/8.1/10系统 hosts文件位置及使用
- JAVA instrument简单使用
- 如何查询iPhone手机的序列号?苹果序列号查询方法
- 英语听力网站推荐-非常不错
- unity3d英语单词拼写小游戏Pics Quiz Maker With Categories 3.0
- 区块链在数字版权领域的应用发展报告(2020)
- PKUSC2018游记
- R语言Duncan检验
- Arm加入龙蜥社区并成为理事单位,国内开源再添国际新力量
- 通过软件架构来达到易用性-易用性的好处
- SQL注入及其危害、防御手段
- 分析器错误消息: 该配置节不能包含 CDATA 或文本元素。
- amdroid studio给备忘录添加背景音乐
热门文章
- access工资明细表_如何用asp.net和access开发简单工资查询系统
- 文件的切分split和结合工具cat介绍
- CentOS-7 安装Lustre-2.10.1文件系统
- java集成ios内购\与ios退款通知处理
- 芯讯通参展2021中国移动全球合作伙伴大会 | 数智先行 共赢未来
- 基于python Django机器学习的二手房交易预测及展示系统 完整代码 毕业设计
- 水果识别数据集(日常常见33种水果)
- 密码学系列(二):专有名词缩写【持更】
- 算法-程序设计课week7-作业-B - TT 的旅行日记
- pvz2 android 内购,pvz2国际版免内购