很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略。 
这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。

原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下:

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.IBinder;
import android.util.Log;public class NetworkStateService extends Service{private static final String tag="tag";private ConnectivityManager connectivityManager;private NetworkInfo info;private BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {Log.d(tag, "网络状态已经改变");connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);info = connectivityManager.getActiveNetworkInfo();  if(info != null && info.isAvailable()) {String name = info.getTypeName();Log.d(tag, "当前网络名称:" + name);//doSomething()} else {Log.d(tag, "没有可用网络");//doSomething()}}}};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {super.onCreate();IntentFilter mFilter = new IntentFilter();mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(mReceiver, mFilter);}@Overridepublic void onDestroy() {super.onDestroy();unregisterReceiver(mReceiver);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);}}

别忘了在Manifast中配置这个Service:

<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />

还有权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在必要的地方启动该Service即可:

Intent i=new Intent(context,NetworkStateService.class);
startService(i);

另外附加几个 Android网络连接的判断

1)判断是否有网络连接

public boolean isNetworkConnected(Context context) {  if (context != null) {  ConnectivityManager mConnectivityManager = (ConnectivityManager) context  .getSystemService(Context.CONNECTIVITY_SERVICE);  NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  if (mNetworkInfo != null) {  return mNetworkInfo.isAvailable();  }  }  return false;  }

2)判断WIFI网络是否可用

public boolean isWifiConnected(Context context) {  if (context != null) {  ConnectivityManager mConnectivityManager = (ConnectivityManager) context  .getSystemService(Context.CONNECTIVITY_SERVICE);  NetworkInfo mWiFiNetworkInfo = mConnectivityManager  .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  if (mWiFiNetworkInfo != null) {  return mWiFiNetworkInfo.isAvailable();  }  }  return false;  }

3)判断MOBILE网络是否可用

public boolean isMobileConnected(Context context) {  if (context != null) {  ConnectivityManager mConnectivityManager = (ConnectivityManager) context  .getSystemService(Context.CONNECTIVITY_SERVICE);  NetworkInfo mMobileNetworkInfo = mConnectivityManager  .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  if (mMobileNetworkInfo != null) {  return mMobileNetworkInfo.isAvailable();  }  }  return false;  }

4)获取当前网络连接的类型信息

public static int getConnectedType(Context context) {  if (context != null) {  ConnectivityManager mConnectivityManager = (ConnectivityManager) context  .getSystemService(Context.CONNECTIVITY_SERVICE);  NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {  return mNetworkInfo.getType();  }  }  return -1;  }

使用Service和BroadcastReceiver实时监听网络状态相关推荐

  1. Android实时监听网络状态

    Android开发实时监听网络状态变化一般有两种方法: 1. 新建一个基类BasicActivity.class,在基类中注册网络监听广播NetworkChangeReceiver.class,所有页 ...

  2. uniapp 安卓端实时监听网络状态

    写在uniapp的APP.vue的onShow方法中 uni.onNetworkStatusChange(function(res) {                 if (res.isConne ...

  3. 初识广播机制(监听网络状态的改变,监听网络是否可以使用)

    Android系统中的广播机制比较灵活,因为Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应 ...

  4. android 监听网络状态

    今天,讲讲怎么监听手机网络状态的改变. 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:nam ...

  5. Android通过使用系统广播监听网络状态的改变

    Android通过使用广播监听网络状态的改变 得先添加权限 //查看网络状态<uses-permission android:name="android.permission.ACCE ...

  6. IOS-网络(监听网络状态)

    1 // 2 // BWNetWorkTool.h 3 // IOS_0131_检测网络状态 4 // 5 // Created by ma c on 16/1/31. 6 // Copyright ...

  7. Android开发动态的监听网络状态的变化

    主要思路:使用Android中的四大组件之:BrocastReceiver监听网络状态的变化.接收到网络状态改变的广播之后判断当前的网络是否可用. 创建广播接收器MyNetworkReceiver p ...

  8. 网络安全netstat监听网络状态。

    网络安全netstat监听网络状态. Internet的通用语言是TCP/TP,它是一组协议,它规定在网络的第四层运输层有两种协议TCP.UDP.端口就是这两个协议打开的,端口分为源端口和目的端口,源 ...

  9. 1.1.14 Electron 监听网络状态

    可以用window.addEventListener来进行时间监听网络状态 JavaScript的一种方式进行监听网络状态,监听的事件分别是online和offline. online : 如果链接上 ...

最新文章

  1. JZOJ 5399. 【NOIP2017提高A组模拟10.7】Confess
  2. Python基础概念_8_字符串处理
  3. Linux里的稀疏文件
  4. Jquery中的this是什么类型
  5. 【AI视野·今日Robot 机器人论文速览 第二十五期】Fri, 1 Oct 2021
  6. 【C语言】运算符与操作符的用法全面汇总(非常有用)
  7. 【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
  8. 使用DocFx生成文档网站并将其发布到GitHub Pages
  9. 哪些手机搭载鸿蒙,鸿蒙2.0搭载手机吗-有什么功能
  10. 浅谈 JSON 那些被转义的字符们
  11. 求解偏微分方程开源有限元软件deal.II学习--Step 13
  12. Java设计模式系列之迭代器模式
  13. 在 jdk 1.4 中打印iteye技术网站
  14. 高级人工智能之语音识别
  15. 【软件建模与UML】(持续更新)
  16. (精品)基于Web的酒店客房管理系统的设计与实现毕业论文+开题报告+项目源码(SSM)及数据库+查重报告
  17. FFmpeg的HEVC解码器源码简单分析:解码器主干部分
  18. 安装ubuntu8.04。。。。
  19. java 私有全局变量_java中的全局变量
  20. SwitchyOmega的简单使用

热门文章

  1. 最全面的HIVE详解
  2. 计算机DQ,dq物理攻击伤害计算 与输出方式比较
  3. js中对字符串进行分割截取的方法
  4. javascript 数据类型
  5. 透过BIOS的ID序列号查询主板厂商
  6. 百度网盘扩容两种技术讲解!真的有永久扩容吗?【粉丝福利】
  7. Python实现简单斗地主发牌流程
  8. java swap函数_Java 利用swap函数交换两个整型数据值
  9. 百度地图API:根据起始点经纬度坐标确认最佳路线规划
  10. 充电宝无线和有线哪个好?无线的充电宝好吗