Android 实时监测(监听)网络连接状态变化

看了网上的很多,都不是自己想要的。所以自己就参考着写了一个。

实现这个的方法很多,我是想的这种,如果哪有不足,有bug的地方希望大家指出,共同进步。。。。

先简单说一下思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了。。

步骤:

1、写个判断网络的工具类.

2、先写个类继承BroadcastReceiver。(不要忘记在清单文件中注册)
          (谢谢ITzxl的提醒)需要在清单文件中添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

3、写个回调接口

4、BaseActivity实现这个接口

上代码:

/** * * @author cj 判断网络工具类 * */ 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; } } /** * 自定义检查手机网络状态是否切换的广播接受器 * * @author cj * */ public class NetBroadcastReceiver extends BroadcastReceiver { public NetEvevt evevt = BaseActivity.evevt; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub // 如果相等的话就说明网络状态发生了变化 if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { int netWorkState = NetUtil.getNetWorkState(context); // 接口回调传过去状态的类型 evevt.onNetChange(netWorkState); } } // 自定义接口 public interface NetEvevt { public void onNetChange(int netMobile); } }

记得在manifest中注册

<receiver android:name="cn.broadcastreceiver.NetBroadcastReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> abstract public class BaseActivity extends FragmentActivity implements NetEvevt { public static NetEvevt evevt; /** * 网络类型 */ private int netMobile; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); evevt = this; inspectNet(); } /** * 初始化时判断有没有网络 */ public boolean inspectNet() { this.netMobile = NetUtil.getNetWorkState(BaseActivity.this); return isNetConnect(); // if (netMobile == 1) { // System.out.println("inspectNet:连接wifi"); // } else if (netMobile == 0) { // System.out.println("inspectNet:连接移动数据"); // } else if (netMobile == -1) { // System.out.println("inspectNet:当前没有网络"); // // } } /** * 网络变化之后的类型 */ @Override public void onNetChange(int netMobile) { // TODO Auto-generated method stub this.netMobile = netMobile; 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; } } public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onNetChange(int netMobile) { // TODO Auto-generated method stub //在这个判断,根据需要做处理 } }

在这需要说明一下,手机在开着wifi长时间不用,自动黑屏长时间,会关闭流量,所以在下拉刷新的时候,把监测状态的提升语给隐藏了!

时间: 2024-12-24 11:11:21

Android 实时监测(监听)网络连接状态变化的相关文章

Android 利用广播监听usb连接状态(变化情况)

废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.lgs.test.testcode.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.widget.Toast; /** * Create

Android 监听网络状态方法详解

Android 监听网络状态方法详解 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission Android:name="android.permission.ACCESS_NETWORK_STATE" /> 二.判断手机网络的几个方案 1)判断是否有网络连接 public boolean isMobileConnected(Context context) { if (context != nul

Android 监听网络变化

Android 监听网络变化  

Android 广播监听网络状态详解及实例代码

Android 广播监听网络状态 我们在做多线程下载的时候,或者是在加载h5界面的时候,常常会遇到网络状态不好或者断网的时候,在这或者当我们的应用程序启动没有退出的时候,我们就需要对网络状态监听加以判断. 这时候,我们一般情况下,两种方式进行处理. 第一: 开启服务. 第二:发送广播的形式. 建议采用方法二. 源代码如下: 广播: /** * 有网络的广播 */ BroadcastReceiver connectionReceiver = new BroadcastReceiver() { @O

Android实现信号强度监听的方法_Android

信号强度的监听是Android手机十分常见的一个重要功能.今天本文就以实例展示Android实现信号强度监听的方法.分享给大家供大家参考. 具体实现代码如下: TelephonyManager Tel; MyPhoneStateListener MyListener; /* Update the listener, and start it */ MyListener = new MyPhoneStateListener(); Tel = (TelephonyManager) getSystem

Android下载进度监听和通知的处理详解

本文实例为大家分享了Android下载进度监听和通知的具体代码,供大家参考,具体内容如下 下载管理器 关于下载进度的监听,这个比较简单,以apk文件下载为例,需要处理3个回调函数,分别是: 1.下载中 2.下载成功 3.下载失败 因此对应的回调接口就有了: public interface DownloadCallback { /** * 下载成功 * @param file 目标文件 */ void onComplete(File file); /** * 下载失败 * @param e */

android 有办法 监听 手机 有没有发出声音 或 获取当前发出声音的音量吗

问题描述 android 有办法 监听 手机 有没有发出声音 或 获取当前发出声音的音量吗 又或者说 监听 当前手机自己发出的声音的分贝,急急急, 求 解决 解决方案 个人认为,你得和硬件人员先沟通下,或者直接咨询平台公司,看支持这个功能不,就如感光sensor一样,都是需要硬件和平台支持的.

android外接键盘监听按键响应时间

问题描述 android外接键盘监听按键响应时间 如题,对于可以外接键盘的android设备,比如盒子之类的智能设备,可以监听到其按键响应时间吗? 解决方案 android 键盘按键监听android 键盘按键监听Android如何键盘按键响应事件 解决方案二: http://blog.csdn.net/kakaxi1o1/article/details/17644705

android l流量监控-android 流量监控 求断开网络连接代码实现

问题描述 android 流量监控 求断开网络连接代码实现 android 流量监控,流量超出时断开网络连接 求断开网络连接代码实现 求代码求逻辑 我找了好久都是监测网络连接状态的,要断开网络连接的代码

广播监听-动态注册监听网络变化没显示?

问题描述 动态注册监听网络变化没显示? API 19的是改变了网络状态没吐司.. 解决方案 iOS动态监听网络变化网络变化监听iOS监听网络状态的变化 解决方案二: 首先确保你在工程的清单文件里注册了这个BroadcastReceiver对象,你看看有吗,还有你看看是否要添加某些权限,具体的我忘了. 解决方案三: 确定一下所有配置没有问题吗?