利用广播机制判断当前网络状态

原创 2016年06月01日 09:14:43

日常的应用中,我们常常需要监听当前的网络状态,这个时候我们常常用到的是广播机智

 intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        netWorkChangeReceiver = new NetWorkChangeReceiver();
        registerReceiver(netWorkChangeReceiver, intentFilter);

网络状态改变的监听

class NetWorkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netWorkInfo = connectionManager.getActiveNetworkInfo();
            if (netWorkInfo != null && netWorkInfo.isAvailable()) {
                if (netWorkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                    Toast.makeText(context, "当前网络是3G", Toast.LENGTH_LONG).show();
                } else if (netWorkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                    Toast.makeText(context, "当前网络是Wifi", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(context, "网络不可用", Toast.LENGTH_SHORT).show();
            }
        }
    }

在程序销毁的时候要将广播一块销毁

protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(netWorkChangeReceiver);
    }

还有一点不能忘记,我们在判断当前网络状态是否改变的时候,需要获取网络监听的权限,这一点很重要,也很容易忽视。如果不添加获取网络的权限的话,程序在运行的过程中会直接崩溃。

当然我们也可以将这些封成工具类,然后直接调用

/**
 * Created by cxz on 2016/5/31 0031.
 */
public class NetworkProber {

/**
     * 网络是否可用
*
     * @param context
* @return
*/
public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) {
        } else {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
                }
            }
        }
return false;
}

/**
     * Gps是否打开
*
     * @param context
* @return
*/
public static boolean isGpsEnabled(Context context) {
        LocationManager locationManager = ((LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE));
List<String> accessibleProviders = locationManager.getProviders(true);
        return accessibleProviders != null && accessibleProviders.size() > 0;
}

/**
     * wifi是否打开
*/
public static boolean isWifiEnabled(Context context) {
        ConnectivityManager mgrConn = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager mgrTel = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        return ((mgrConn.getActiveNetworkInfo() != null && mgrConn
                .getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel
                .getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS);
}

/**
     * 判断当前网络是否是wifi网络
* if(activeNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) { //判断3G网
*
     * @param context
* @return boolean
     */
public static boolean isWifi(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}

/**
     * 判断当前网络是否是3G网络
*
     * @param context
* @return boolean
     */
public static boolean is3G(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetInfo != null
&& activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return true;
}
return false;
}


//另外还有两个方法判断网络是否可用:
public static boolean isNetworkAvailable_00(Context context) {
        ConnectivityManager cm = ((ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE));
        if (cm != null) {
            NetworkInfo info = cm.getActiveNetworkInfo();
            if (info != null && info.isConnectedOrConnecting()) {
return true;
}
        }
return false;
}

public static boolean isNetworkAvailable_01(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo network = cm.getActiveNetworkInfo();
        if (network != null) {
return network.isAvailable();
}
return false;
}

// 更加严谨的写法:
public static boolean checkNet(Context context) {

try {
            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {

                NetworkInfo info = connectivity.getActiveNetworkInfo();
                if (info != null && info.isConnected()) {

if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
                }
            }
        } catch (Exception e) {
return false;
}
return false;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Broadcast监听网络状态,ping判断网络是否可用

判断网络状态,android提供了api,可以很方便的使用。但是在某些情况下,网络状态连接正常,但是并不一定就可以去访问其他网页。比如,路由器打开了,但是没有插上网线,手机GPRS打开了,但是手机已经...
  • Kern_
  • Kern_
  • 2015年09月25日 13:18
  • 1095

Android 通过WIFI状态监听广播,判断进入指定wifi范围

原文地址:http://blog.csdn.net/kongxiuqi/article/details/52524500 ---------------------------------------...
  • zengmingen
  • zengmingen
  • 2016年12月07日 10:37
  • 792

iOS开发 - 获取当前网络状态

runtime获取网络状态 首先导入头文件:#import 实现如下代码判断: // 状态栏是由当前控制器控制的,首先获取当前app。 UIApplication *app = [...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2015年08月28日 17:55
  • 2886

Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动

不多说了,直接看代码, NB人会懂的! package com.example.vdisktest; import android.app.Activity; import android.con...
  • yinkai1205
  • yinkai1205
  • 2013年05月28日 11:35
  • 17094

iOS如何获取手机当前的网络状态

相信大家使用最多的方法就是使用Reachab
  • u014483033
  • u014483033
  • 2014年09月12日 14:20
  • 2128

Swift - 判端网络连接状态,连接类型(3G还是Wifi)

1,Reachability.swift 是一个使用Swift写的第三方网络检测类。 可以测试网络是否连接,并支持3G和Wifi的检测。 使用样例: ...
  • yiyihuazi
  • yiyihuazi
  • 2017年06月17日 22:08
  • 559

Android获取当前网络状态

Android获取当前网络状态效果图 有网络 没有网络 源码下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/905283...
  • q4878802
  • q4878802
  • 2015年08月27日 10:32
  • 1237

安卓通过广播实时监听当前网络状况

需求: 当网络断开或者连接上的时候,需要你的APP作出一定的响应,有时候还需要判断当前网络的类型,wifi或者移动数据… 分析:网络发生变化系统会发送广播 通过注册一个广播接收器来接收广播 判断当...
  • z1353095373
  • z1353095373
  • 2016年12月13日 09:17
  • 2968

C#中判断网络连接的状态

using System; using System.Collections.Generic; using System.Text; using System.Net.NetworkInform...
  • lz37025
  • lz37025
  • 2016年09月02日 20:19
  • 1699

4.1.3.3 Android 网络状态监听的静态广播接受者和动态广播接受者Broadcast-Receiver

静态注册广播接收者。 可以理解为静态变量,可以直接使用。 可以直接使用,用完生命周期就结束了,需要用的时候再直接使用。 动态注册广播接收者,可以理解为实例变量,需要对象才能调用。 静态注...
  • Rodulf
  • Rodulf
  • 2016年02月28日 11:23
  • 1055
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用广播机制判断当前网络状态
举报原因:
原因补充:

(最多只允许输入30个字)