Android检测网络类型

主要使用BroadcastReceiver去监听网络变化,实时发广播去通知:

首先要封装一个工具类去检测网络

public class NetWorkUtils { private static final int NETWORK_TYPE_UNAVAILABLE = -1;    // private static final int NETWORK_TYPE_MOBILE = -100;    private static final int NETWORK_TYPE_WIFI = -101;    private static final int NETWORK_CLASS_WIFI = -101;    private static final int NETWORK_CLASS_UNAVAILABLE = -1;    /** Unknown network class. */    private static final int NETWORK_CLASS_UNKNOWN = 0;    /** Class of broadly defined "2G" networks. */    private static final int NETWORK_CLASS_2_G = 1;    /** Class of broadly defined "3G" networks. */    private static final int NETWORK_CLASS_3_G = 2;    /** Class of broadly defined "4G" networks. */    private static final int NETWORK_CLASS_4_G = 3;    // 适配低版本手机    /** Network type is unknown */    public static final int NETWORK_TYPE_UNKNOWN = 0;    /** Current network is GPRS */    public static final int NETWORK_TYPE_GPRS = 1;    /** Current network is EDGE */    public static final int NETWORK_TYPE_EDGE = 2;    /** Current network is UMTS */    public static final int NETWORK_TYPE_UMTS = 3;    /** Current network is CDMA: Either IS95A or IS95B */    public static final int NETWORK_TYPE_CDMA = 4;    /** Current network is EVDO revision 0 */    public static final int NETWORK_TYPE_EVDO_0 = 5;    /** Current network is EVDO revision A */    public static final int NETWORK_TYPE_EVDO_A = 6;    /** Current network is 1xRTT */    public static final int NETWORK_TYPE_1xRTT = 7;    /** Current network is HSDPA */    public static final int NETWORK_TYPE_HSDPA = 8;    /** Current network is HSUPA */    public static final int NETWORK_TYPE_HSUPA = 9;    /** Current network is HSPA */    public static final int NETWORK_TYPE_HSPA = 10;    /** Current network is iDen */    public static final int NETWORK_TYPE_IDEN = 11;    /** Current network is EVDO revision B */    public static final int NETWORK_TYPE_EVDO_B = 12;    /** Current network is LTE */    public static final int NETWORK_TYPE_LTE = 13;    /** Current network is eHRPD */    public static final int NETWORK_TYPE_EHRPD = 14;    /** Current network is HSPA+ */    public static final int NETWORK_TYPE_HSPAP = 15;    /**     * 获取运营商     *     * @return     */    public static String getProvider(Context context) {        String provider = "未知";        try {            TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);            String IMSI = telephonyManager.getSubscriberId();            Log.e("tag", "getProvider.IMSI:" + IMSI);            if (IMSI == null) {                if (TelephonyManager.SIM_STATE_READY == telephonyManager                        .getSimState()) {                    String operator = telephonyManager.getSimOperator();                    Log.e("tag", "getProvider.operator:" + operator);                    if (operator != null) {                        if (operator.equals("46000")                                || operator.equals("46002")                                || operator.equals("46007")) {                            provider = "中国移动";                        } else if (operator.equals("46001")) {                            provider = "中国联通";                        } else if (operator.equals("46003")) {                            provider = "中国电信";                        }                    }                }            } else {                if (IMSI.startsWith("46000") || IMSI.startsWith("46002")                        || IMSI.startsWith("46007")) {                    provider = "中国移动";                } else if (IMSI.startsWith("46001")) {                    provider = "中国联通";                } else if (IMSI.startsWith("46003")) {                    provider = "中国电信";                }            }        } catch (Exception e) {            e.printStackTrace();            Log.e("error", "getProvider: "+e.toString());        }        return provider;    }    /**     * 获取网络类型     *     * @return     */    public static String getCurrentNetworkType(Context context) {        int networkClass = getNetworkClass(context);        String type = "未知";        switch (networkClass) {            case NETWORK_CLASS_UNAVAILABLE:                type = "无";                break;            case NETWORK_CLASS_WIFI:                type = "Wi-Fi";                break;            case NETWORK_CLASS_2_G:                type = "2G";                break;            case NETWORK_CLASS_3_G:                type = "3G";                break;            case NETWORK_CLASS_4_G:                type = "4G";                break;            case NETWORK_CLASS_UNKNOWN:                type = "未知";                break;        }        return type;    }    private static int getNetworkClass(Context context) {        int networkType = NETWORK_TYPE_UNKNOWN;        try {            final NetworkInfo network = ((ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE))                    .getActiveNetworkInfo();            if (network != null && network.isAvailable()                    && network.isConnected()) {                int type = network.getType();                if (type == ConnectivityManager.TYPE_WIFI) {                    networkType = NETWORK_TYPE_WIFI;                } else if (type == ConnectivityManager.TYPE_MOBILE) {                    TelephonyManager telephonyManager = (TelephonyManager) context                            .getSystemService(                                    Context.TELEPHONY_SERVICE);                    networkType = telephonyManager.getNetworkType();                }            } else {                networkType = NETWORK_TYPE_UNAVAILABLE;            }        } catch (Exception ex) {            ex.printStackTrace();        }        return getNetworkClassByType(networkType);    }    private static int getNetworkClassByType(int networkType) {        switch (networkType) {            case NETWORK_TYPE_UNAVAILABLE:                return NETWORK_CLASS_UNAVAILABLE;            case NETWORK_TYPE_WIFI:                return NETWORK_CLASS_WIFI;            case NETWORK_TYPE_GPRS:            case NETWORK_TYPE_EDGE:            case NETWORK_TYPE_CDMA:            case NETWORK_TYPE_1xRTT:            case NETWORK_TYPE_IDEN:                return NETWORK_CLASS_2_G;            case NETWORK_TYPE_UMTS:            case NETWORK_TYPE_EVDO_0:            case NETWORK_TYPE_EVDO_A:            case NETWORK_TYPE_HSDPA:            case NETWORK_TYPE_HSUPA:            case NETWORK_TYPE_HSPA:            case NETWORK_TYPE_EVDO_B:            case NETWORK_TYPE_EHRPD:            case NETWORK_TYPE_HSPAP:                return NETWORK_CLASS_3_G;            case NETWORK_TYPE_LTE:                return NETWORK_CLASS_4_G;            default:                return NETWORK_CLASS_UNKNOWN;        }    }}

新建一个BroadcastReceiver去实时监听网络状态变化

public class NetWorkStatusReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {            String operator = NetWorkUtils.getProvider(context);            String netType = NetWorkUtils.getCurrentNetworkType(context);            Toast.makeText(context, "运营商:"+operator+"\n 网络状态:"+netType, Toast.LENGTH_LONG).show();        }    }}

当网络状态发生变化时,就可以实时监听网络状态了。

更多相关文章

  1. Android(安卓)MediaPlayer 常用方法介绍
  2. Android使用Retrofit进行网络请求
  3. AIR Native Extension的使用(Android)一 : 打包ane
  4. Android中判断网络功能是否可用
  5. Android的网络状态判断
  6. TabHost页卡
  7. Android(安卓)7.0 https/tls证书配置问题
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. Android电量和插拔电源状态广播监听

随机推荐

  1. Android彩信存储
  2. 图书馆座位管理系统(android,java后台,my
  3. Failed to fetch URL http://dl-ssl.goog
  4. Android(安卓)build system分析
  5. android:padding和android:margin的区别
  6. 软件工程 大四团队 android j2ee 求实习
  7. VMware虚拟机安装安卓(Android)x86系统图文
  8. android直接用v4l2采集图片数据
  9. 使用android:autoSizeMinTextSize需要api
  10. Android(安卓)FrameWork 底层开发