在Android开发中,常常使用到网络,可能需要针对不同的网络(WIFI或者流量),需要做不同的处理,那么怎么获取当前网络呢?为此写了个工具类,以后需要使用,直接拿来用就行(就喜欢拿来主义,哈哈)。

package com.wangguifa.phonestate;import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;/*** Created by wangguifa on 2017/5/22* 获取网络状态工具类*/
public class NetUtils {public static final int NETWORK_NONE = 0; // 没有网络连接public static final int NETWORK_WIFI = 1; // wifi连接public static final int NETWORK_2G = 2; // 2Gpublic static final int NETWORK_3G = 3; // 3Gpublic static final int NETWORK_4G = 4; // 4Gpublic static final int NETWORK_MOBILE = 5; // 手机流量/*** 获取运营商名字** @param context context* @return int*/public static String getOperatorName(Context context) {/** getSimOperatorName()就可以直接获取到运营商的名字* 也可以使用IMSI获取,getSimOperator(),然后根据返回值判断,例如"46000"为移动* IMSI相关链接:http://baike.baidu.com/item/imsi*/TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);// getSimOperatorName就可以直接获取到运营商的名字return telephonyManager.getSimOperatorName();}/*** 获取当前网络连接的类型** @param context context* @return int*/public static int getNetworkState(Context context) {ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 获取网络服务if (null == connManager) { // 为空则认为无网络return NETWORK_NONE;}// 获取网络类型,如果为空,返回无网络NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();if (activeNetInfo == null || !activeNetInfo.isAvailable()) {return NETWORK_NONE;}// 判断是否为WIFINetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if (null != wifiInfo) {NetworkInfo.State state = wifiInfo.getState();if (null != state) {if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {return NETWORK_WIFI;}}}// 若不是WIFI,则去判断是2G、3G、4G网TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);int networkType = telephonyManager.getNetworkType();switch (networkType) {/*GPRS : 2G(2.5) General Packet Radia Service 114kbpsEDGE : 2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbpsUMTS : 3G WCDMA 联通3G Universal Mobile Telecommunication System 完整的3G移动通信技术标准CDMA : 2G 电信 Code Division Multiple Access 码分多址EVDO_0 : 3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3GEVDO_A : 3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G1xRTT : 2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,HSDPA : 3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbpsHSUPA : 3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbpsHSPA : 3G (分HSDPA,HSUPA) High Speed Packet AccessIDEN : 2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)EVDO_B : 3G EV-DO Rev.B 14.7Mbps 下行 3.5GLTE : 4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4GEHRPD : 3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级HSPAP : 3G HSPAP 比 HSDPA 快些*/// 2G网络case TelephonyManager.NETWORK_TYPE_GPRS:case TelephonyManager.NETWORK_TYPE_CDMA:case TelephonyManager.NETWORK_TYPE_EDGE:case TelephonyManager.NETWORK_TYPE_1xRTT:case TelephonyManager.NETWORK_TYPE_IDEN:return NETWORK_2G;// 3G网络case TelephonyManager.NETWORK_TYPE_EVDO_A:case TelephonyManager.NETWORK_TYPE_UMTS:case TelephonyManager.NETWORK_TYPE_EVDO_0:case TelephonyManager.NETWORK_TYPE_HSDPA:case TelephonyManager.NETWORK_TYPE_HSUPA:case TelephonyManager.NETWORK_TYPE_HSPA:case TelephonyManager.NETWORK_TYPE_EVDO_B:case TelephonyManager.NETWORK_TYPE_EHRPD:case TelephonyManager.NETWORK_TYPE_HSPAP:return NETWORK_3G;// 4G网络case TelephonyManager.NETWORK_TYPE_LTE:return NETWORK_4G;default:return NETWORK_MOBILE;}}/*** 判断网络是否连接** @param context context* @return true/false*/public static boolean isNetConnected(Context context) {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;}}}return false;}/*** 判断是否wifi连接** @param context context* @return true/false*/public static synchronized boolean isWifiConnected(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);if (connectivityManager != null) {NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if (networkInfo != null) {int networkInfoType = networkInfo.getType();if (networkInfoType == ConnectivityManager.TYPE_WIFI || networkInfoType == ConnectivityManager.TYPE_ETHERNET) {return networkInfo.isConnected();}}}return false;}
}

  上面的注释已经很清楚了,应该都能看懂。讲此工具类直接复制到项目即可,复制完了以后别忘了加权限,获取网络状态是需要权限的:

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

  这样就大功告成,下面来测试一下吧:


4G网络状态

无网络状态

WIFI状态

  通过上面测试,可以看出可以获得运营商和网络状态,证明是可以使用的。由于手机卡有限,只测试了楼主自己的,若有获取错误的请联系我及时增加。
  将自己工作和学习中的常用工具整理出来,以后直接用就行,不用再去写,以后还会不定期增加各种常用的工具类,也欢迎提出你需要的工具类,由我来整理。

Android开发之获取网络类型(WIFI、2G、3G、4G)和运营商名称相关推荐

  1. 获取iPhone/iPad设备网络类型(2G,3G,4G,5G,WIFI)

    目前我们获取手机网络类型主要还是用的 AFNetwork 但是AFNetwork有个问题就是类型不够充分,只能四种类型 typedef NS_ENUM(NSInteger, AFNetworkReac ...

  2. Android之如何获取网络类型并判断是否可用

    ConnectivityManager主要管理和网络连接相关的操作,通过getSystemService(Context.CONNECTIVITY_SERVICE)获 取网络连接的服务.因此我们可以通 ...

  3. Android开发之获取网络IP地址方法总结

      在进行Android应用开发过程中,有时候会遇到获取当前Android设备所使用的网络IP地址的场景,有时候需要本地的网络IP地址,即局域网地址,更多的时候是需要当前网络的真实的对外IP地址,即真 ...

  4. android获取有线、wifi、3G(4G)的IP

    //获取ip地址 public static String getLocalIPAddress(Context context) {NetworkInfo info = ((ConnectivityM ...

  5. android 2g 3g wifi,2G/3G/4G无线信号放大器 Signal Booster 2G/3G/4G WiFi

    这个信号增强器应用程序是为那些总是良好的无线信号和网络信号的斗争,这个信号增强器的应用程序将有助于提高这一个应用程序将作为2G信号增强器,信号增强器3G,4G信号增强器和wifi信号增强器,它提供的信 ...

  6. IOS开发之判断iPhone连接的网络(WiFi,2G,3G,LTE,4G)是IPV4还是IPV6网络

    可能问题太简单了,在网上没有找到答案,只好我自己写了. 由于苹果审核我们的应用在ipv6环境下,无法连接到服务器.所以把原来的用IP作为请求网址改成了域名来发请求.虽然审核过了,但是在国内还有域名解析 ...

  7. 全网最全最明白的全球运营商无线网络频段分布2G/3G/4G说明及国内NB-IoT的网络部署频段说明

    全球大多数运营商使用900MHz频段来部署NB-IoT,有些运营商部署在800MHz频段. 中国联通的NB-IoT部署在900MHz.1800MHz频段,目前只有900MHz 可以试验. 中国移动为了 ...

  8. 什么是1G/2G/3G/4G/5G

    什么是1G/2G/3G/4G/5G 参考:http://www.360doc.com/content/14/1213/22/5458405_432718054.shtml 介绍 1G:表示第一代移动通 ...

  9. java 判断网络类型_Android 网络类型判断(2g、3g、wifi)及IP地址获取

    使用NetworkInfo的getType()方法可以判断是WiFi还是手机网络.手机网络的情况下,使用NetworkInfo的 getSubtype()方法再去和TelephonyManager的网 ...

最新文章

  1. Pytorch+LSTM+AI自动写诗实战
  2. 内存Cookie和硬盘Cookie
  3. 环形缓冲区ringbuffer
  4. 【PAT甲级 进位相加】1058 A+B in Hogwarts (20 分) C 全部AC
  5. ES6 对正则表达式的扩展
  6. 【转】3.4(译)构建Async同步基元,Part 4 AsyncBarrier
  7. python中空格属于字符吗_举例说明python中空格是属于字符
  8. 诺奖得主:中国机制促成抗疫成功经济复苏
  9. python生成数据库登录界面_python 生成数据库
  10. TeraTerm自动登录(Login)
  11. ajax请求完之前的loading加载
  12. 23. Navigator javaEnabled() 方法
  13. Layui 表格渲染
  14. jquery实现新浪微博的表情插件
  15. 软件工程—需求分析阶段
  16. 大数据面试题知识点分析(十一)之Flume面试真题及答案
  17. QQ聊天记录恢复、迁移教程(改变默认存储位置、个人文件夹保存位置)【转载】
  18. [Maven实战-许晓斌]-[第二章]-2.1在Windows上安装maven
  19. 对策论基础---其他类型对策简介
  20. 有偿调查问卷赚钱攻略

热门文章

  1. php授权系统原理,Mysql权限系统工作原理-PHP教程,PHP基础
  2. 关于神经网络训练的一些技巧NN Tricks
  3. Python_ML-Day04: 深度学习、Tensorflow
  4. python如何实现手眼定标_相机标定(一):机器人手眼标定
  5. 【电子签名手机-vue】
  6. 小米电视安装电视家方法
  7. python打印日历_python输出指定月份日历的方法
  8. CY3/CY3.5/CY5/CY5.5/CY7/CY7.5标记链霉亲和素 Streptavidin
  9. idea中如何删除工程
  10. OpenGL,glx,glaux,glut,freeglut,glew,glfw,mesa