文档章节

Android之监测手机网络状态的广播

程序袁_绪龙
 程序袁_绪龙
发布于 2015/01/19 16:02
字数 548
阅读 112
收藏 9

今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都没有普及的情况下,基本都是包流量的,所以在做一些视频应用软件的时候,如果用户在使用WIFI的时候如果无线网络中断,手机网络会自动换手机网络,从而给用户造成不必要的损失。

Android手机在对于一些系统广播,如短信的接收,电话的接收,电池电量过低,网络状态改变都会发一个广播,既然系统会发送一条广播,那么就需要一个接收器来处理这个广播。首先定义一个类继承NetworkChangeReceiver,重写onReceive()就行了。然后在OnReceive()这个方法进行相应广播的处理。

网络状态切换的广播类:

[java]  view plain copy
  1. package com.test;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.net.ConnectivityManager;  
  7. import android.net.NetworkInfo.State;  
  8.   
  9. public class extends BroadcastReceiver {  
  10.   
  11.     @Override  
  12.     public void onReceive(Context context, Intent intent) {  
  13.         State wifiState = null;  
  14.         State mobileState = null;  
  15.         ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
  16.         wifiState = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();  
  17.         mobileState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();  
  18.         if (wifiState != null && mobileState != null  
  19.                 && State.CONNECTED != wifiState  
  20.                 && State.CONNECTED == mobileState) {  
  21.             // 手机网络连接成功  
  22.         } else if (wifiState != null && mobileState != null  
  23.                 && State.CONNECTED != wifiState  
  24.                 && State.CONNECTED != mobileState) {  
  25.             // 手机没有任何的网络  
  26.         } else if (wifiState != null && State.CONNECTED == wifiState) {  
  27.             // 无线网络连接成功  
  28.         }  
  29.   
  30.     }  
  31.   
  32. }  

在上面这个接收类中OnReceive()方法,你可以在上面三个网络状态(只有手机网络,只有无线网络,没有任何网络)中进行相应的处理,然后在应用中注册广播,注册广播有2种方式,一种在androidmanifest.xml中注册,一种在java代码中注册。

第一种:

[html]  view plain copy
  1. <receiver  
  2.     android:name="com.test.NetworkBroadcast"  
  3.     android:label="NetworkConnection" >  
  4.     <intent-filter>  
  5.         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  
  6.     </intent-filter>  
  7. </receiver>  


第二种:

可以在Activity的onCreate()方法中注册广播,在Activity的onDestory()方法中卸载广播。

[java]  view plain copy
  1. private BroadcastReceiver networkBroadcast=new BroadcastReceiver();  
[java]  view plain copy
  1.         private void registerNetworkReceiver() {  
  2.     IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);  
  3.     this.registerReceiver(networkBroadcast, filter);  
  4. }  
  5.   
  6. private void unRegisterNetworkReceiver() {  
  7.         this.unregisterReceiver(networkBroadcast);  
  8. }  

注意:在接收类中的onReceive()方法中不要处理太多复杂逻辑问题,尤其耗时的操作。

本文转载自:http://blog.csdn.net/yelbosh/article/details/7912913

程序袁_绪龙
粉丝 106
博文 242
码字总数 66750
作品 0
普陀
程序员
私信 提问
《Android深入透析》之广播(Broadcast)

概述 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递。举一个大家都比较熟悉的例子来说明。在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频...

朵朵和糖糖
2014/11/12
346
0
Android应用程序 --- WakeLock 保持后台唤醒状态

一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使...

带梦想一7飞
2014/02/17
1K
0
Android开发_android权限

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangty0223/article/details/9389879 访问登记属性 android.permission.ACCESSCHECKINPROPERTIES ,读取或写...

张腾元_Ternence
2013/07/20
0
0
如何拦截手机屏幕和唤醒动作?让一个Activity在开机后自动运行?

当按手机的电源键时手机黑屏,这叫屏幕休眠。 当再次按下手机电源键时屏幕会变亮,并处于锁屏状态,这叫屏幕唤醒 拦截屏幕休眠和唤醒广播的接收器只能通过Java代码注册,不能再AndroidMainfest...

带梦想一7飞
2013/04/15
856
0
android学习笔记之Intent与BroadcastReceiver(四)

监听安卓本地的Broadcast Intents 比如时区的改变,数据连接状态,短信的接收,来电,底座模式,电池状态等等。 下面的列表介绍的是一些设备状态变化的Actions: 1.ACTIONBOOTCOMPLETED 当你的...

Chanimalx
2013/01/13
3K
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象编程

1、类和对象 类是对象的蓝图和模板,而对象是实例;即对象是具体的实例,类是一个抽象的模板 当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定...

huijue
今天
9
0
redis异常解决 :idea启动本地redis出现 jedis.exceptions.JedisDataException: NOAUTH Authentication required

第一次安装在本地redis服务,试试跑项目,结果却出现nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required错误,真是让人头疼 先检查一...

青慕
今天
20
0
Spring 之 IoC 源码分析 (基于注解方式)

一、 IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 二、IoC方式 Spring为IoC提供了2种方式,一种是基于xml...

星爵22
今天
28
0
Docker安装PostgresSql

Docker安装PostgresSql 拉取docker镜像 # docker pull postgres:10.1010.10: Pulling from library/postgres9fc222b64b0a: Pull complete 38296355136d: Pull complete 2809e135bbdb: Pu......

Tree
今天
12
0
内容垂直居中

方法一: 采用上下 padding 形式,将内容放置在垂直居中 .line { padding: 2% 0; text-align: center; height: 5px;} <div class="line"> 内容垂直居中</div> 方法二: 采......

低至一折起
今天
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部