不多说了,直接看代码, NB人会懂的!

package com.example.vdisktest;import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;public class NetTypeActivity extends Activity {/** Called when the activity is first created. */public static final String CTWAP = "ctwap";public static final String CTNET = "ctnet";public static final String CMWAP = "cmwap";public static final String CMNET = "cmnet";public static final String NET_3G = "3gnet";public static final String WAP_3G = "3gwap";public static final String UNIWAP = "uniwap";public static final String UNINET = "uninet";public static final int TYPE_CT_WAP = 5;public static final int TYPE_CT_NET = 6;public static final int TYPE_CT_WAP_2G = 7;public static final int TYPE_CT_NET_2G = 8;public static final int TYPE_CM_WAP = 9;public static final int TYPE_CM_NET = 10;public static final int TYPE_CM_WAP_2G = 11;public static final int TYPE_CM_NET_2G = 12;public static final int TYPE_CU_WAP = 13;public static final int TYPE_CU_NET = 14;public static final int TYPE_CU_WAP_2G = 15;public static final int TYPE_CU_NET_2G = 16;public static final int TYPE_OTHER = 17;public static Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");/** 没有网络 */public static final int TYPE_NET_WORK_DISABLED = 0;/** wifi网络 */public static final int TYPE_WIFI = 4;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);long start = System.currentTimeMillis();int checkNetworkType = checkNetworkType(this);Log.i("NetType", "===========elpase:"+ (System.currentTimeMillis() - start));switch (checkNetworkType) {case TYPE_WIFI:Log.i("NetType", "================wifi");break;case TYPE_NET_WORK_DISABLED:Log.i("NetType", "================no network");break;case TYPE_CT_WAP:Log.i("NetType", "================ctwap");break;case TYPE_CT_WAP_2G:Log.i("NetType", "================ctwap_2g");break;case TYPE_CT_NET:Log.i("NetType", "================ctnet");break;case TYPE_CT_NET_2G:Log.i("NetType", "================ctnet_2g");break;case TYPE_CM_WAP:Log.i("NetType", "================cmwap");break;case TYPE_CM_WAP_2G:Log.i("NetType", "================cmwap_2g");break;case TYPE_CM_NET:Log.i("NetType", "================cmnet");break;case TYPE_CM_NET_2G:Log.i("NetType", "================cmnet_2g");break;case TYPE_CU_NET:Log.i("NetType", "================cunet");break;case TYPE_CU_NET_2G:Log.i("NetType", "================cunet_2g");break;case TYPE_CU_WAP:Log.i("NetType", "================cuwap");break;case TYPE_CU_WAP_2G:Log.i("NetType", "================cuwap_2g");break;case TYPE_OTHER:Log.i("NetType", "================other");break;default:break;}}/**** 判断Network具体类型(联通移动wap,电信wap,其他net)* * */public static int checkNetworkType(Context mContext) {try {final ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);final NetworkInfo mobNetInfoActivity = connectivityManager.getActiveNetworkInfo();if (mobNetInfoActivity == null || !mobNetInfoActivity.isAvailable()) {// 注意一:// NetworkInfo 为空或者不可以用的时候正常情况应该是当前没有可用网络,// 但是有些电信机器,仍可以正常联网,// 所以当成net网络处理依然尝试连接网络。// (然后在socket中捕捉异常,进行二次判断与用户提示)。return TYPE_NET_WORK_DISABLED;} else {// NetworkInfo不为null开始判断是网络类型int netType = mobNetInfoActivity.getType();if (netType == ConnectivityManager.TYPE_WIFI) {// wifi net处理return TYPE_WIFI;} else if (netType == ConnectivityManager.TYPE_MOBILE) {// 注意二:// 判断是否电信wap:// 不要通过getExtraInfo获取接入点名称来判断类型,// 因为通过目前电信多种机型测试发现接入点名称大都为#777或者null,// 电信机器wap接入点中要比移动联通wap接入点多设置一个用户名和密码,// 所以可以通过这个进行判断!boolean is3G = isFastMobileNetwork(mContext);final Cursor c = mContext.getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);if (c != null) {c.moveToFirst();final String user = c.getString(c.getColumnIndex("user"));if (!TextUtils.isEmpty(user)) {if (user.startsWith(CTWAP)) {return is3G ? TYPE_CT_WAP : TYPE_CT_WAP_2G;} else if (user.startsWith(CTNET)) {return is3G ? TYPE_CT_NET : TYPE_CT_NET_2G;}}}c.close();// 注意三:// 判断是移动联通wap:// 其实还有一种方法通过getString(c.getColumnIndex("proxy")获取代理ip// 来判断接入点,10.0.0.172就是移动联通wap,10.0.0.200就是电信wap,但在// 实际开发中并不是所有机器都能获取到接入点代理信息,例如魅族M9 (2.2)等...// 所以采用getExtraInfo获取接入点名字进行判断String netMode = mobNetInfoActivity.getExtraInfo();Log.i("", "==================netmode:" + netMode);if (netMode != null) {// 通过apn名称判断是否是联通和移动wapnetMode = netMode.toLowerCase();if (netMode.equals(CMWAP)) {return is3G ? TYPE_CM_WAP : TYPE_CM_WAP_2G;} else if (netMode.equals(CMNET)) {return is3G ? TYPE_CM_NET : TYPE_CM_NET_2G;} else if (netMode.equals(NET_3G)|| netMode.equals(UNINET)) {return is3G ? TYPE_CU_NET : TYPE_CU_NET_2G;} else if (netMode.equals(WAP_3G)|| netMode.equals(UNIWAP)) {return is3G ? TYPE_CU_WAP : TYPE_CU_WAP_2G;}}}}} catch (Exception ex) {ex.printStackTrace();return TYPE_OTHER;}return TYPE_OTHER;}private static boolean isFastMobileNetwork(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);switch (telephonyManager.getNetworkType()) {case TelephonyManager.NETWORK_TYPE_1xRTT:return false; // ~ 50-100 kbpscase TelephonyManager.NETWORK_TYPE_CDMA:return false; // ~ 14-64 kbpscase TelephonyManager.NETWORK_TYPE_EDGE:return false; // ~ 50-100 kbpscase TelephonyManager.NETWORK_TYPE_EVDO_0:return true; // ~ 400-1000 kbpscase TelephonyManager.NETWORK_TYPE_EVDO_A:return true; // ~ 600-1400 kbpscase TelephonyManager.NETWORK_TYPE_GPRS:return false; // ~ 100 kbpscase TelephonyManager.NETWORK_TYPE_HSDPA:return true; // ~ 2-14 Mbpscase TelephonyManager.NETWORK_TYPE_HSPA:return true; // ~ 700-1700 kbpscase TelephonyManager.NETWORK_TYPE_HSUPA:return true; // ~ 1-23 Mbpscase TelephonyManager.NETWORK_TYPE_UMTS:return true; // ~ 400-7000 kbpscase TelephonyManager.NETWORK_TYPE_EHRPD:return true; // ~ 1-2 Mbpscase TelephonyManager.NETWORK_TYPE_EVDO_B:return true; // ~ 5 Mbpscase TelephonyManager.NETWORK_TYPE_HSPAP:return true; // ~ 10-20 Mbpscase TelephonyManager.NETWORK_TYPE_IDEN:return false; // ~25 kbpscase TelephonyManager.NETWORK_TYPE_LTE:return true; // ~ 10+ Mbpscase TelephonyManager.NETWORK_TYPE_UNKNOWN:return false;default:return false;}}}

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

  1. android获取ip方法,Android开发准确获取手机IP地址的两种方式

    最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下获取ip地址的两种方式. 比如微信支付,后台在做接口的时候,要求App端传入IP地址,我们需要判断是网络环境,WI-FI还是3G, ...

  2. 在Android中快速获取手机的高级权限

    在Android中快速获取手机的高级权限 想要快速获取Android手机的ROOT权限吗?也许因为ROOT教程太复杂,也许因为不会进工程模式,让我们在使用Android手机时感觉像是开别人的车一样,总 ...

  3. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于访问有关设 ...

  4. android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  5. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  6. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  7. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  8. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  9. 信号强度 android,一种获取手机信号强度的方法

    出于项目需求,需要获取到手机信号强度.本人不才,以前都是采用toString()的方法,然后截取,得到强度,但发现很多机型都不适合.苦苦在API中搜寻,结果都不是很理想.最后在Stackoverflo ...

最新文章

  1. 我为 VS Code 开发了一个 Deno 插件
  2. PaaS平台应用的12要素原则
  3. Java中使用递归算法实现子级架构的查询
  4. HTML页面仿iphone数字角标
  5. MVC, MVP, MVVM比较以及区别(下)
  6. Dropbox - share your doc on the cloud
  7. 【今天下午活动】从 HelloWorld 到 AntDesign,Blazor 将 .NET 带到现代前端圈
  8. 有趣又有用的皮托定理!
  9. matlab 反激变压器,基于matlab的反激电路设计..doc
  10. VS2010平台下OpenCV编译和安装
  11. java Array入门
  12. php用户注册重复_php实现单个用户禁止重复登录,防止同一用户同时登陆
  13. Windows Tomcat 内存溢出解决方法
  14. MacBook安装jdk1.8方便快捷稳定的方法
  15. 网易推理拼图验证码识别
  16. 解决微信端苹果手机无法跳转页面的问题
  17. Dubbo中暴露服务的过程解析
  18. android 圆形渐变背景,android实现圆形渐变进度条
  19. docker内存满了
  20. Shell | 文件或关键字查询

热门文章

  1. 2021-08-20 做一个网站需要多少钱大概?
  2. 分析报告-网站搜索引擎优化诊断
  3. 异或 ^ 的几个作用
  4. html mata详解
  5. 【JTAG】1687协议详解
  6. Neo4j 社区版4.x安装踩坑记录
  7. 上次的问题已经得到解决
  8. JQuery 基础(1)—— 基本介绍、选择器、筛选器(选择器的一种)
  9. Xbox360游戏刻录傻瓜教程nbsp;ImgBurn…
  10. tracert 显示网关到不了服务器,Tracert命令使用常见问题