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 ...
随机推荐
- backbone csdn
http://blog.csdn.net/the_fire/article/details/7444067 blog.csdn.net/the_fire/article/details/7445448 ...
- 为什么 API 监控对于任何业务来说都重要?
对于商务运算来说一个比较稳定的趋势在于对 API 日渐增长的依赖性,几乎每一个代码级交互过程都会调用 API 来收集数据或触发某些关键过程.没有 API ,你将无法与同伴进行文件交流,没有 API , ...
- 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 ->最大二分匹配)
[题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何一 ...
- QWidget属性,函数的学习
我把所有属性重新按功能排了一遍,这样才能灌到自己脑子里,并且方便自己以后查找: -------------------- 颜色/渲染方式 -----------------------QWidget: ...
- 从C#到Python —— 4 类及面向对象
http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...
- android:layout_weight详解
参考; www.cnblogs.com/alpha-bowen/archive/2011/03/02/1969343.html 总结: 当需要对页面按比例分配时会用到这个选项: layout_weig ...
- bzoj1458
题做多的话不难想到可能是以行列作为二分图两个点集,然后网络流相关 具体怎么弄呢 我们可以用求补集的思想,假设有解 我们先把棋盘能放的地方放满士兵,然后我们尽量的把士兵拿走 并且要满足行和列的要求, 说 ...
- 关于启动Visual Studio 2010 旗舰版的几个错误的解决方法。
关于启动Visual Studio 2010 旗舰版的几个错误的解决方法.亲测. 重做系统之后,今天是第一次打开Visual Studio 2010 旗舰版码代码,结果遇到几个弹出的对话框,现在与大家 ...
- Android-RC4的加密解密代码
static String RC4(String keys, String encrypt) { char[] keyBytes = new char[256]; char[] cypherBytes ...
- CentOS升级内核的方法
升级前的内核版本为:2.6.32-431.el6.x86_64 升级后的内核版本为:3.10.101-1.el6.elrepo.x86_64 升级方法: 1.导入key rpm --import ht ...