Android 对手机网络的检测和监听的方法示例

此次分享内容

使用BroadcastReceiver广播接收器来接收网络状态(采用系统广播)

BroadcastReceiver作为Android四大组件之一;
Android:BroadcastReceiver广播接收器最全面解析

网络权限

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

自定义广播接收器

public class NetWorkStateReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {

    System.out.println("网络状态发生变化");
    //检测API是不是小于23,因为到了API23之后getNetworkInfo(int networkType)方法被弃用
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {

      //获得ConnectivityManager对象
      ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

      //获取ConnectivityManager对象对应的NetworkInfo对象
      //获取WIFI连接的信息
      NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
      //获取移动数据连接的信息
      NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
      if (wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {
        Toast.makeText(context, "WIFI已连接,移动数据已连接", Toast.LENGTH_SHORT).show();
      } else if (wifiNetworkInfo.isConnected() && !dataNetworkInfo.isConnected()) {
        Toast.makeText(context, "WIFI已连接,移动数据已断开", Toast.LENGTH_SHORT).show();
      } else if (!wifiNetworkInfo.isConnected() && dataNetworkInfo.isConnected()) {
        Toast.makeText(context, "WIFI已断开,移动数据已连接", Toast.LENGTH_SHORT).show();
      } else {
        Toast.makeText(context, "WIFI已断开,移动数据已断开", Toast.LENGTH_SHORT).show();
      }
//API大于23时使用下面的方式进行网络监听
    }else {

      System.out.println("API level 大于23");
      //获得ConnectivityManager对象
      ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

      //获取所有网络连接的信息
      Network[] networks = connMgr.getAllNetworks();
      //用于存放网络连接信息
      StringBuilder sb = new StringBuilder();
      //通过循环将网络信息逐个取出来
      for (int i=0; i < networks.length; i++){
        //获取ConnectivityManager对象对应的NetworkInfo对象
        NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]);
        sb.append(networkInfo.getTypeName() + " connect is " + networkInfo.isConnected());
      }
      Toast.makeText(context, sb.toString(),Toast.LENGTH_SHORT).show();
    }
  }
}

注册广播

  1. 动态注册
  2. 静态注册

动态注册

public class MainActivity extends AppCompatActivity {

  NetWorkStateReceiver netWorkStateReceiver;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }

  //在onResume()方法注册
  @Override
  protected void onResume() {
    if (netWorkStateReceiver == null) {
      netWorkStateReceiver = new NetWorkStateReceiver();
    }
    IntentFilter filter = new IntentFilter();
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(netWorkStateReceiver, filter);
    System.out.println("注册");
    super.onResume();
  }

  //onPause()方法注销
  @Override
  protected void onPause() {
    unregisterReceiver(netWorkStateReceiver);
    System.out.println("注销");
    super.onPause();
  }
}

静态注册

在AndroidManifest.xml进行广播的静态注册

<receiver android:name=".NetWorkStateReceiver">
  <intent-filter>
//检测网络变化的acton
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</receiver>

至此,今天分享完毕,这样就可以实现对网络状态的实时监听了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android 7.0 监听网络变化的示例代码
  • android 监听网络状态的变化及实战的示例代码
  • Android 动态注册监听网络变化实例详解
  • Android 监听网络状态方法详解
  • Android编程监听网络连接状态改变的方法
  • Android 实时监测(监听)网络连接状态变化
  • Android 广播监听网络状态详解及实例代码
  • Android网络状态实时监听实例代码(二)
  • Android 网络状态实时监听代码实例(一)
  • Android中监听判断网络连接状态的方法
(0)

相关推荐

  • Android 网络状态实时监听代码实例(一)

    其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听. 1.添加访问网络和获取网络状态的权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permissio

  • Android中监听判断网络连接状态的方法

    在无网或网速差的状态下,没必要去连接服务器. 你可以使用 ConnectivityManager 来判断是否连到网络,以及网络类型. 判断是否有网络连接 下面的代码用ConnectivityManager查询是活动网络连接判断是否有Internet连接. 复制代码 代码如下: ConnectivityManager cm =         (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);  

  • Android 动态注册监听网络变化实例详解

    Android 动态注册监听网络变化实例详解 新建一个BroadcastTest项目,然后修改MainActivity中的代码,如下: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle

  • Android编程监听网络连接状态改变的方法

    本文实例讲述了Android编程监听网络连接状态改变的方法.分享给大家供大家参考,具体如下: BroadcastReceiver public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //Toast.makeText(context, intent

  • Android 监听网络状态方法详解

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

  • android 监听网络状态的变化及实战的示例代码

    平时我们在请求错误的情况下,通常会进行处理一下,一般来说,主要分为两方面的错误 没有网络的错误 在有网络的情况下,我们客户端的错误或者服务器端的错误 今天这篇博客主要阐述以下问题 怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用 网络没有打开情况下的处理,如弹出对话框,跳转到 打开 WiFi设置的界面等 非WiFi情况下是否加载图片,是否播放视频等 实现思路 在网络错误的情况下获取网络状态进行判断,这种方法是可行的,但你想过了没有,如果每次都要进行这样的判断,

  • Android网络状态实时监听实例代码(二)

    上篇文章给大家介绍了Android 网络状态实时监听代码实例(一),感兴趣的朋友可以点击了解详情,本文接着给大家介绍android网络状态监听相关知识,具体内容如下所示: 在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityManager有四个主要任务: 1.监听手机网络状态(包括GPRS,WIFI, UMTS等) 2.手机状态发生改变时,发送广播 3.当一

  • Android 7.0 监听网络变化的示例代码

    Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可. public class NetChangeReceiver extends BroadcastReceiver { private static final String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; @Override public void onReceive(Context conte

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

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

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

    看了网上的很多,都不是自己想要的.所以自己就参考着写了一个. 实现这个的方法很多,我是想的这种,如果哪有不足,有bug的地方希望大家指出,共同进步.... 先简单说一下思路:网络变化时系统会发出广播.所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了.. 步骤: 1.写个判断网络的工具类. 2.先写个类继承BroadcastReceiver.(不要忘记在清单文件中注册)           (谢谢ITzxl的提醒)需要在清单文件中添加权限<uses-permission a

随机推荐