Android开发之使用广播监听网络状态变化
我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示。如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听。
使用广播机制来监听网络状态主要涉及到以下几点:
1.需要自己编写个网络广播接收器,该接收器继承BroadcastReceiver类,用来接收系统发出的广播。比如我自己写了个NetStatusReceiver广播接收器。代码如下:
package com.log.system; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast; public class NetStatusReceiver extends BroadcastReceiver{ public static final int NETSTATUS_INAVAILABLE = 0;
public static final int NETSTATUS_WIFI = 1;
public static final int NETSTATUS_MOBILE = 2;
public static int netStatus = 0;
public static boolean updateSuccess = false;
private INetStatusListener mINetStatusListener; public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileNetInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo allNetInfo = cm.getActiveNetworkInfo(); if (allNetInfo == null) {
if (mobileNetInfo != null && (mobileNetInfo.isConnected() || mobileNetInfo.isConnectedOrConnecting())) {
netStatus = NETSTATUS_MOBILE;
} else if (wifiNetInfo != null && wifiNetInfo.isConnected() || wifiNetInfo.isConnectedOrConnecting()) {
netStatus = NETSTATUS_WIFI;
} else {
netStatus = NETSTATUS_INAVAILABLE;
}
} else {
if (allNetInfo.isConnected() || allNetInfo.isConnectedOrConnecting()) {
if (mobileNetInfo.isConnected() || mobileNetInfo.isConnectedOrConnecting()) {
netStatus = NETSTATUS_MOBILE;
} else {
netStatus = NETSTATUS_WIFI;
}
} else {
netStatus = NETSTATUS_INAVAILABLE;
}
}
if(mINetStatusListener != null){
mINetStatusListener.getNetState(netStatus);
}
// if (netStatus == NETSTATUS_INAVAILABLE) {
// Toast.makeText(context, "网络未连接",Toast.LENGTH_SHORT).show();
// } else if (netStatus == NETSTATUS_MOBILE) {
// Toast.makeText(context, "网络处于移动网络",Toast.LENGTH_SHORT).show();
// } else {
// Toast.makeText(context, "网络处于Wifi网络",Toast.LENGTH_SHORT).show();
// }
} public void setNetStateListener(INetStatusListener listener){
mINetStatusListener = listener;
} public interface INetStatusListener{
public void getNetState(int state);
}
}
2.注册广播接收器
首先new一个广播接收器,然后对该接收器进行注册,也就是注册广播,然后并设置监听器。注册广播和设置监听的实现如下:
netReceiver = new NetStatusReceiver();
setRegisterReceiver(netReceiver);
setNetListener();
对应的具体方法实现代码如下:
public void setRegisterReceiver(NetStatusReceiver netReceiver){
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(netReceiver, filter);
}
public void setNetListener(){
netReceiver.setNetStateListener(new INetStatusListener() {
@Override
public void getNetState(int state) {
// TODO Auto-generated method stub
if (state == NetStatusReceiver.NETSTATUS_INAVAILABLE) {
Toast.makeText(getBaseContext(), "网络未连接",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getBaseContext(), "网络已经连接",
Toast.LENGTH_SHORT).show();
}
}
});
}
3.为了要获取网络的状态,需要在manifest文件中设置相关权限,即配置:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Android开发之使用广播监听网络状态变化的更多相关文章
- wx.onNetworkStatusChange(function (res) 监听网络状态变化 实践方案
网络状态 · 小程序 https://developers.weixin.qq.com/miniprogram/dev/api/device.html#wxonnetworkstatuschangec ...
- 【转】Android开发20——单个监听器监听多个按钮点击事件
原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...
- Android开发入门——Button绑定监听事件三种方式
import android.app.Activity; import android.os.Bundle;import android.view.View;import android.widget ...
- HTML5判断设备在线离线及监听网络状态变化例子
经测试android ipad默认的浏览器支持,用appcan封装的网页也支持 本文原创,转载请说明出处 <!doctype html> <html> <head> ...
- HTML5外包团队——技术分享:HTML5判断设备在线离线及监听网络状态变化例子
<!doctype html> <html> <head> <meta http-equiv="content-type" content ...
- Android实时监听网络状态(2)
在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityMana ...
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
- Android 5.0 以上监听网络变化
大家好,大概有一个多月没有更新博客了,我是干什么去了呢?很明显,程序员当然要加班……这一次跟大家分享一下新项目的一些心得. 监听网络变化在开发中是经常用到的,例如我们断网有一些友好的提示,或者根据不同 ...
- android动态注册监听网络变化异常
在使用广播接收器监听网络变化的时候,在AndroidManifest.xml中加入<user-permission android:name="android.permission.A ...
随机推荐
- Stanford CoreNLP--功能列表
Standford CoreNLP包含很多功能,github上有源码,github地址:Stanford CoreNLP,有需要的话可以下载看看. 主要内容在网站上都有描述,原文是这样写的: Choo ...
- OneAlert 入门(三)——事件分析
OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.有了 OneAlert,你可以更快更合理地为事件划分 ...
- Gartner 如何看 RASP 和 WAF?
在这个计算机网络飞速发展的网络时代里,新兴的网络威胁正在不断「侵蚀」着的应用程序和核心数据的安全,各种繁杂的防护手段也随之接踵而来.众所周知,Gartner 是全球最具权威的 IT 研究与顾问咨询公司 ...
- 设计模式之策略模式Strategy
/** * 策略设计模式 * 策略模式:定义一系列的算法族,使他们之间可以相互转换,动态的改变其行为. * 问题:设计一个鸭子模拟游戏. * 现在有一群鸭子: * ①这些鸭可以有飞的行为(分为快和慢) ...
- malloc(0)的问题
http://blog.csdn.net/js_xj/article/details/5826042 解答: 首先来解释malloc(0)的问题,这个语法是对的,而且确实也分配了内存,但是内存空间是0 ...
- go网络编程示例,客户端,服务器端
http://blog.csdn.net/wangningyu/article/details/22859245 http://blog.csdn.net/wangningyu/article/det ...
- Xcode插件筛选
Xcode高效插件推荐 好像很多iOS开发的同学都不知道Xcode有插件这么一说,所以整理了一下自己用的Xcode高效插件,分享给大家 下列插件在Xcode 7.0.1 版本做测试通过可以使用 在Xc ...
- 2013 ACM区域赛长沙 A Alice’s Print Service HDU 4791
题意:就是一个打印分段收费政策,印的越多,单张价格越低,输入需要印刷的数量,求最小印刷费用一个细节就是,比当前还小的状态可能是最后几个. #include<stdio.h> #includ ...
- vimrc语法
前言 工欲善其事,必先利其器.一个programmer必然要先有一个好的editor.vim就是一个十分强大的编辑器.它的强大之处,在于其个性化和可定制.学习vim,就像学习Linux,学习perl, ...
- 转载:monkeyrunner工具
前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括 android测试框架.CTS.Monkey.Monkeyrunner.benchmark. ...