WIFI、3G、2G网络连接判断深入分析

广告载入、软件在线更新、网络编程都需要检测网络的类型。对于WIFI和3G 2G的判断一直很困惑,下午花了几个小时,完成以下测试。测试手机为MT15I+WIFI+移动2G,屌丝用不起3G,有条件的朋友可以跟贴追加3G网络测试结果。

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.telephony.TelephonyManager;
import android.util.Log;
public class NetWork {
//以下判断函数测试结果。
   //1.开WIFI关闭GPRS,                                                                isWifi()Active()=true,G2G3()=10000,isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=true,is3G()=false
   //2.先开GPRS 开WIFI但不能连 ,UC不能上网              isWifi()Active()=false,G2G3()=2,   isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
   //3.先开GPRS再开手机无线热点                                                  isWifi()Active()=false,G2G3()=2,   isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true
   //4 先关GPRS再开手机无线热点                                                    isWifi()Active()=false,G2G3()=1000,isNetworkAvailable()=false,isWifi()Enabled()=false,isWifi()=false,is3G()=false
   //5.同时打开WIFI与GPRS                 isWifi()Active()=false,G2G3()=1000,isNetworkAvailable()=false,isWifi()Enabled()=false,isWifi()=false,is3G()=false
   //6.同时打开WIFI与GPRS,但无WIFI网络 UC可上网   isWifi()Active()=false,G2G3()=2   ,isNetworkAvailable()=true,isWifi()Enabled()=true,isWifi()=false,is3G()=true  

public static int G3G2(Context context) {
  ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo info = connectivity.getActiveNetworkInfo();
  if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
   if (info.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS || info.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA || info.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE) {
    Log.i("tag", "mobile connected " + info.getSubtype());
   } else {
    Log.i("tag", " not mobile");
   }
   return info.getSubtype();
  } else
   Log.i("tag", "not mobile connected ");
  return 10000;
  // return 1联通2G 2移动2G 4电信2G 5 6 12电信3G 83 联通3G 13LTE 11 IDEN 9HSUPA 10 HSPA 15HSPAP
}
// 下面这个有人说真机可用
public static boolean isWifiActive(Context inContext) {
  Context context = inContext.getApplicationContext();
  ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  if (connectivity != null) {
   NetworkInfo[] info = connectivity.getAllNetworkInfo();
   if (info != null) {
    for (int i = 0; i < info.length; i++) {
     if (info
.getTypeName().equals("WIFI") && info.isConnected()) {
      return true;
     }
    }
   }
  }
  return false;
}
// 网络是否可用
public static boolean isNetworkAvailable(Context context) {
  ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  if (connectivity == null) {
  } else {
   NetworkInfo[] info = connectivity.getAllNetworkInfo();
   if (info != null) {
    for (int i = 0; i < info.length; i++) {
     if (info
.getState() == NetworkInfo.State.CONNECTED) {
      return true;
     }
    }
   }
  }
  return false;
}
// public void CheckNetworkState() {//getsystemservice 只能用于ACTIVITY,需要用的朋友自己去ACTIVITY测试
// boolean flag = false;
// ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
// State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
// // 如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面
// if (mobile == State.CONNECTED || mobile == State.CONNECTING)
// return;
// if (wifi == State.CONNECTED || wifi == State.CONNECTING)
// return;
// }
public static boolean isWifiEnabled (Context context) {
  ConnectivityManager mgrConn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  TelephonyManager mgrTel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
  return ((mgrConn.getActiveNetworkInfo() != null && mgrConn.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS);
}
public static boolean isWifi (Context context) {
  ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
  if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) {
   return true;
  }
  return false;
}
public static boolean is3G(Context context) {
  ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
  if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
   return true;
  }
  return false;
}




测试不容易,花了几小时,特分享出来,觉得好用请顶个贴。
内容概要:本文围绕SecureCRT自动化脚本开发在毕业设计中的应用,系统介绍了如何利用SecureCRT的脚本功能(支持Python、VBScript等)提升计算机、网络工程等相关专业毕业设计的效率与质量。文章从关键概念入手,阐明了SecureCRT脚本的核心对象(如crt、Screen、Session)及其在解决多设备调试、重复操作、跨场景验证等毕业设计常见痛点中的价值。通过三个典型应用场景——网络设备配置一致性验证、嵌入式系统稳定性测试、云平台CLI兼容性测试,展示了脚本的实际赋能效果,并以Python实现的交换机端口安全配置验证脚本为例,深入解析了会话管理、屏幕同步、输出解析、异常处理和结果导出等关键技术细节。最后展望了低代码化、AI辅助调试和云边协同等未来发展趋势。; 适合人群:计算机、网络工程、物联网、云计算等相关专业,具备一定编程基础(尤其是Python)的本科或研究生毕业生,以及需要进行设备自动化操作的科研人员; 使用场景及目标:①实现批量网络设备配置的自动验证与报告生成;②长时间自动化采集嵌入式系统串口数据;③批量执行云平台CLI命令并分析兼容性差异;目标是提升毕业设计的操作效率、增强实验可复现性与数据严谨性; 阅读建议:建议读者结合自身毕业设计课题,参考文中代码案例进行本地实践,重点关注异常处理机制与正则表达式的适配,并注意敏感信息(如密码)的加密管理,同时可探索将脚本与外部工具(如Excel、数据库)集成以增强结果分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值