经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android项目实战(五十三):判断网络连接是否为有线状态(tv项目适配)
来源:cnblogs  作者:听着music睡  时间:2018/12/26 9:46:28  对本文有异议

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

 

  1. /**
  2. * 获取当前的网络状态 :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2
  3. * 自定义
  4. *
  5. * @param context
  6. * @return
  7. */
  8. public static int getAPNType(Context context) {
  9. //结果返回值
  10. int netType = 0;
  11. //获取手机所有连接管理对象
  12. ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  13. //获取NetworkInfo对象
  14. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  15. //NetworkInfo对象为空 则代表没有网络
  16. if (networkInfo == null) {
  17. return netType;
  18. }
  19. //否则 NetworkInfo对象不为空 则获取该networkInfo的类型
  20. int nType = networkInfo.getType();
  21. if (nType == ConnectivityManager.TYPE_WIFI) {
  22. //WIFI
  23. netType = 1;
  24. } else if (nType == ConnectivityManager.TYPE_MOBILE) {
  25. int nSubType = networkInfo.getSubtype();
  26. TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
  27. //3G 联通的3G为UMTS或HSDPA 电信的3G为EVDO
  28. if (nSubType == TelephonyManager.NETWORK_TYPE_LTE
  29. && !telephonyManager.isNetworkRoaming()) {
  30. netType = 4;
  31. } else if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS
  32. || nSubType == TelephonyManager.NETWORK_TYPE_HSDPA
  33. || nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0
  34. && !telephonyManager.isNetworkRoaming()) {
  35. netType = 3;
  36. //2G 移动和联通的2G为GPRS或EGDE,电信的2G为CDMA
  37. } else if (nSubType == TelephonyManager.NETWORK_TYPE_GPRS
  38. || nSubType == TelephonyManager.NETWORK_TYPE_EDGE
  39. || nSubType == TelephonyManager.NETWORK_TYPE_CDMA
  40. && !telephonyManager.isNetworkRoaming()) {
  41. netType = 2;
  42. } else {
  43. netType = 2;
  44. }
  45. }
  46. return netType;
  47. }

 

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

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

  

  1. /*
  2. * @category 判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网)
  3. * @return
  4. */
  5. public static final boolean ping() {
  6. String result = null;
  7. try {
  8. String ip = "www.baidu.com";// ping 的地址,可以换成任何一种可靠的外网
  9. Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次
  10. // 读取ping的内容,可以不加
  11. InputStream input = p.getInputStream();
  12. BufferedReader in = new BufferedReader(new InputStreamReader(input));
  13. StringBuffer stringBuffer = new StringBuffer();
  14. String content = "";
  15. while ((content = in.readLine()) != null) {
  16. stringBuffer.append(content);
  17. }
  18. Log.d("------ping-----", "result content : " + stringBuffer.toString());
  19. // ping的状态
  20. int status = p.waitFor();
  21. if (status == 0) {
  22. result = "success";
  23. return true;
  24. } else {
  25. result = "failed";
  26. }
  27. } catch (IOException e) {
  28. result = "IOException";
  29. } catch (InterruptedException e) {
  30. result = "InterruptedException";
  31. } finally {
  32. Log.d("----result---", "result = " + result);
  33. }
  34. return false;
  35. }

 

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

 

  

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号