一般对于android手机,我们可以通过sdk提供的方法判断网络情况

     /**
* 获取当前的网络状态 :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2
* 自定义
*
* @param context
* @return
*/
public static int getAPNType(Context context) {
//结果返回值
int netType = ;
//获取手机所有连接管理对象
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取NetworkInfo对象
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
//NetworkInfo对象为空 则代表没有网络
if (networkInfo == null) {
return netType;
}
//否则 NetworkInfo对象不为空 则获取该networkInfo的类型
int nType = networkInfo.getType();
if (nType == ConnectivityManager.TYPE_WIFI) {
//WIFI
netType = ;
} else if (nType == ConnectivityManager.TYPE_MOBILE) {
int nSubType = networkInfo.getSubtype();
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//3G 联通的3G为UMTS或HSDPA 电信的3G为EVDO
if (nSubType == TelephonyManager.NETWORK_TYPE_LTE
&& !telephonyManager.isNetworkRoaming()) {
netType = ;
} else if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS
|| nSubType == TelephonyManager.NETWORK_TYPE_HSDPA
|| nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0
&& !telephonyManager.isNetworkRoaming()) {
netType = ;
//2G 移动和联通的2G为GPRS或EGDE,电信的2G为CDMA
} else if (nSubType == TelephonyManager.NETWORK_TYPE_GPRS
|| nSubType == TelephonyManager.NETWORK_TYPE_EDGE
|| nSubType == TelephonyManager.NETWORK_TYPE_CDMA
&& !telephonyManager.isNetworkRoaming()) {
netType = ;
} else {
netType = ;
}
}
return netType;
}

  注意的是对于Tv项目,android系统的Tv(比如小米电视),有的是支持有线连接的(非wifi,2g 3g 4g)的 , 此时上述方法会判断为0,无网络连接状态,所以对于Tv项目,需要对网络适配进行兼容

  解决办法就是ping一个外网。

  

/*
* @category 判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网)
* @return
*/
public static final boolean ping() { String result = null;
try {
String ip = "www.baidu.com";// ping 的地址,可以换成任何一种可靠的外网
Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次
// 读取ping的内容,可以不加
InputStream input = p.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
StringBuffer stringBuffer = new StringBuffer();
String content = "";
while ((content = in.readLine()) != null) {
stringBuffer.append(content);
}
Log.d("------ping-----", "result content : " + stringBuffer.toString());
// ping的状态
int status = p.waitFor();
if (status == ) {
result = "success";
return true;
} else {
result = "failed";
}
} catch (IOException e) {
result = "IOException";
} catch (InterruptedException e) {
result = "InterruptedException";
} finally {
Log.d("----result---", "result = " + result);
}
return false;
}

  由此可以对网络状态进行: 有线/wifi/2g/3g/4g的区分

  

最新文章

  1. C#写爬虫,版本V2.1
  2. __DATE__ 与 __TIME__转换为标准格式时间字符串的方法
  3. storage disk
  4. 了解 Office 365
  5. Linux的awk命令
  6. 【转】Java日期计算之Joda-Time
  7. c++之socket,阻塞模式
  8. PHP 防范CC攻击
  9. Note++ 的快捷
  10. MediaPlayer开发全解析
  11. tomcat最大线程数的设置(转)
  12. Python3 标准库概览
  13. Spring Security中html页面设置hasRole无效的问题
  14. 高性能mysql的事物隔离级别
  15. 安装mono和monoDevelop开发环境
  16. 基于【字节】操作的IO接口:InputStream、OutputStream
  17. prop和attr的比较
  18. zabbix 监控 ElasticSearch
  19. Ubuntu16.04 创建桌面快捷方式
  20. JAVA HW2

热门文章

  1. rsync命令详解、rsync用ssh隧道方式同步
  2. ArcPy 批量给shp字段赋值
  3. Android 9.0适配遇到的问题1
  4. Appium的入门使用
  5. PowerShell禁止执行脚本解决方法
  6. SQLServer之删除用户自定义数据库用户
  7. 微信小程序客服消息开发实战:实时在手机上接收小程序客服消息通知,以及在手机上回复
  8. python爬虫之selenium、phantomJs
  9. JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()
  10. .NET Core微服务之基于Steeltoe使用Hystrix熔断保护与监控