判断网络是否可用以及当前手机的网络类型
2016-11-08 10:40
507 查看
前言
android的入门开发教程最近都没怎么更新,实在是抱歉,主要是最近公司的项目赶,实在是抽不出时间来写,但最近一定会补上。公司一直都没有配电脑,没办法,一个字:穷!我之前一直都用的我用了5年的华硕电脑,但是编译项目实在是太卡了。我实在是忍不了了。所以上个星期我新换了电脑,1w5的mac,真是贵。辛辛苦苦攒了大半年的工资,上一个月就全部被我败完了。- -真是罪过,罪过。不过换了mac我感觉我的工作效率提升了不少。所以我感觉这投资还是值得的,为自己投资嘛!呸,又扯远了!前几天产品说了一个需求,需要在登陆页面的时候判断一下网络类型,这个问题我在之前的项目中遇到过,当时也没怎么想,所以就直接去百度搜来了粘贴上去了,这次又遇到了这样一个功能,于是又打算去百度搜。但是想了想,觉得总这样也不是个办法,所以自己就花时间总结了一下,顺便也完善了一下自己的几个工具类!
关于网络这方面的问题,我们可以使用的系统管理器有两个,TelephonyManager和ConnectivityManager, 前者主要是判断网络的类型,而后者主要是判断是否连接!例如我们在ConnectivityManager中判断网络类型常用的api主要有如下两种,不是wifi就是手机网络:
ConnectivityManager.TYPE_MOBILE –>手机网络类型为手机的网络
ConnectivityManager.TYPE_WIFI –>手机网络类型为wifi
当然ConnectivityManager可以判断的连接类型还有很多,比如蓝牙连接等。有兴趣的小伙伴可以查一查ConnectivityManager中其他的连接类型。这里我就不过多叙述了。
ConnectivityManager.TYPE_BLUETOOTH —>蓝牙连接
关于获取网络是否可用的问题
//判断网络是否可用 public static boolean isNetworkConnected(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); return netInfo != null && netInfo.isConnected(); }
备注:
如果仅仅是用来判断网络连接,则可以使用 cm.getActiveNetworkInfo().isAvailable();
需要添加访问网络状态权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
判断当前的网络类型,可判断wifi类型,2G,3G以及4G类型
// 判断网络类型 public static String getNetWorkType(Context context){ String netWorkState = ""; TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE); ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE)); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(networkInfo != null && networkInfo.isAvailable()){ if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI){ //网络状态为wifi netWorkState = "WIFI"; return netWorkState; } else if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){ //网络状态为手机 //判断手机网络是2g , 3g, 以及4g //String subtypeName = networkInfo.getSubtypeName(); //System.out.println("网络类型: subtypeName:" + subtypeName); //这里我根据的是电话管理器中的类型来进行判断, //当然你也可以根据subtuypeName来判断,这个是从连接管理器中拿到的 int type = telephonyManager.getNetworkType(); System.out.println("网络类型: type:" + type); switch (type){ case TelephonyManager.NETWORK_TYPE_GPRS: case TelephonyManager.NETWORK_TYPE_EDGE: case TelephonyManager.NETWORK_TYPE_CDMA: case TelephonyManager.NETWORK_TYPE_1xRTT: case TelephonyManager.NETWORK_TYPE_IDEN: netWorkState = "2G"; return netWorkState; case TelephonyManager.NETWORK_TYPE_UMTS: case TelephonyManager.NETWORK_TYPE_EVDO_0: case TelephonyManager.NETWORK_TYPE_EVDO_A: 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: netWorkState = "3G"; return netWorkState; case TelephonyManager.NETWORK_TYPE_LTE: netWorkState = "4G"; return netWorkState; case TelephonyManager.NETWORK_TYPE_UNKNOWN: default: netWorkState = "unknown network type"; return netWorkState; } } } return ""; }
总结
该封装的我已经都封装好了,我也测试了部分机器,我自己的手机和公司的测试机都能够识别所属网络类型,我觉得这个工具类应该可以满足大部分情况了,当然我自己也有考虑不周全的情况,如果发现了错误,请各位大神不吝指正,万分感谢!相关文章推荐
- android 判断当前环境网络是否可用及获取当前网络类型
- 常见的http状态响应码和判断手机网络是否连接以及连接类型
- Android判断当前网络是否可用--示例代码
- Android判断当前网络是否可用--示例代码
- Android判断当前网络是否可用
- android 检测网络是否可用,以及网络类型
- Android判断当前网络是否可用--示例代码
- 程序里判断当前手机是否支持WLAN网络
- Android 判断当前网络连接是否可用、打开设置网络界面
- 判断 网络是否通常,以及判断用户使用的网络类型,时2G\3G\还是wifi
- 判断android手机当前是否接入网络
- Android判断当前网络是否可用--示例代码(转载)
- 判断android手机当前是否接入网络
- 判断android手机当前是否接入网络
- [Android开发常见问题-6] 如何检测手机当前网络是否可用?
- Android判断当前网络是否可用--示例代码
- 判断当前网络是否可用
- Android检测网络状态,判断当前网络是否可用
- Android中判断当前网络是否可用
- Android中用于检测当前手机网络是否可用