今天,讲讲怎么监听手机网络状态的改变。

一.加入网络权限

获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。

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

二.判断手机网络的几个方案

1)判断是否有网络连接

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;
}

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;
}

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;
}

在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来完成该工作。

ConnectivityManager有四个主要任务:

1、监听手机网络状态(包括GPRS,WIFI, UMTS等)

2、手机状态发生改变时,发送广播

3、当一个网络连接失败时进行故障切换

4、为应用程序提供可以获取可用网络的高精度和粗糙的状态

当我们要在程序中监听网络状态时,只要一下几个步骤即可:

1、定义一个Receiver重载其中的onReceive函数,在其中完成所需要的功能,如根据WIFI和GPRS是否断开来改变空间的外观

connectionReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {Log.i(TAG, "unconnect");// unconnect network  这时提示用户网络断开信息}else {// connect network     可以做一些网络请求,刷新界面}}};

2、在适当的地方注册Receiver,可以在程序中注册,在onCreate中调用如下函数即可

IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(connectionReceiver, intentFilter);

3、在适当时取消注册Receiver,可以在程序中取消,在onDestroye中调用如下函数即可:

if (connectionReceiver != null) {unregisterReceiver(connectionReceiver);}

说了这么多。其实主要是通过ConnectivityManager获取当前的网络状态,或者监听网络状态的改变。这样,当应用需要联网时,网络状态发生改变可以及时提示用户,或者当网络重新连接时自动获取网络数据进行刷新。

android 监听网络状态就讲完了。

就这么简单。



android 监听网络状态相关推荐

  1. Android实时监听网络状态

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

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

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

  3. Android 监听网络连接状态,判断网络连接方式,9.0网络连接,获取已连接WiFi名称SSID和MAC

    获取已连接的WiFi名称 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> ...

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

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

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

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

  6. 使用Service和BroadcastReceiver实时监听网络状态

    很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略.  这里,我采用Service+BroadcastReceiver的形式实时监听网络变化. 原理是程序在背后启一个Ser ...

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

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

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

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

  9. 1.1.14 Electron 监听网络状态

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

最新文章

  1. html 右边框变短,HTML / CSS:使边框右侧高度动态化
  2. RebornDB:下一代分布式Key-Value数据库
  3. Web开发中的矢量绘图(vml,svg)处理和应用
  4. lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑
  5. 现代软件工程 作业 2 结对项目
  6. 10月15日 第一天申请成功
  7. 力扣-1641. 统计字典序元音字符串的数目
  8. myBatis之入门示例
  9. OSChina 周二乱弹 —— 技术宅正确装逼姿势
  10. 视频教程-【国内首套H3C V7交换机实战课程-1】Comware V7使用、维护与管理-H3C认证
  11. LABEL MATRIX里用计数器自动生成流水号和自定义条码格式
  12. 什么是存储过程,存储过程的作用及优点
  13. 【情感分析:挖掘观点、情感和情绪】读书笔记-01
  14. C语言题目:打印华氏温度与摄氏温度对照表(for循环思路一)(有能力的同学老师们赞一下呀)
  15. numpy block创建分块矩阵
  16. 如何理解statsmodels.ols的输出结果?ols计算的线性回归结果以及手动计算的结果的对比
  17. 汇编语言中PTR的含义及作用
  18. libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by erlang-22.0.7-1.el7.x86_64
  19. Linux内核教程(1) - 道路千万条,调试最重要
  20. 碳中和背景下我国空调系统发展趋势2022(李先庭)

热门文章

  1. http://www.vpython.org/index-ch.html
  2. dirname和basename命令
  3. SDOI 2006 - 保安站岗
  4. 解决数据库 Table 'content_tags' is marked as crashed and should be repaired 表损坏问题
  5. iis7 上传限制问题
  6. step5 . day4 网络编程 基于UDP协议的网络编程流程及API
  7. [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
  8. docker三剑客之docker-machine
  9. Problem H: tmk买礼物
  10. AngularJs ng-route路由详解