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 ...
随机推荐
- NWERC 2012 Problem J Joint Venture
刚刚开始想的是用二分的方法做,没想到这个题目这么水,直接暴力就行: 代码: #include<cstdio> #include<algorithm> #define maxn ...
- 难搞的EXCHANGE重新安装错误
Sample Exchange Setup Log III: [8/12/2010 2:59:38 AM] [1] [ERROR] Unable to remove product with code ...
- 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)
[题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...
- 2016 Web 开发资源工具大搜罗
原文链接: 100+ Awesome Web Development Tools and Resources Web的迅猛发展对于开发者来说既是一件好事也是一件坏事.不断紧跟潮流学习新的技术.编程语言 ...
- mysql 区间锁 对于没有索引 非唯一索引 唯一索引 各种情况
The locks are normally next-key locks that also block inserts into the "gap" immediately b ...
- React入门2
React 入门实例教程 最简单开始学习 JSX 的方法就是使用浏览器端的 JSXTransformer.我们强烈建议你不要在生产环境中使用它.你可以通过我们的命令行工具 react-tools 包来 ...
- Android调试时, "adb devices"命令提示 adb server is out of date. killing...
C:\Users\xxxx>adb devicesadb server is out of date. killing... 查看端口, 发现被占用 C:\Users\xxxx>adb n ...
- Java I/O学习(一)
写作目的 自学Java,Java中流的概念比较复杂,故专门作一整理.期望开始学习的童鞋,看完本文后对Java流有一个大致的认识.主要分三个小篇: 一.概述.输入/输出字节流 二.输入/输出字符流.装饰 ...
- selenium webdriver(1)---浏览器操作
启动浏览器 如何启动浏览器已在上篇文章中说明,这里还是以chrome为例,firefox.IE启动方式相同. //启动浏览器 import org.openqa.selenium.WebDriver; ...
- UART(串口)
(1)串行通信线路三种工作方式:单工通信.半双工通信.全双工通信 单工:单工就是指A只能发信号,而B只能接收信号,通信是单向的. 半双工:半双工就是指A能发信号给B,B也能发信号给A,但这两个过程不能 ...