网络状态的判断

来源:互联网 发布:java数组转成json 编辑:程序博客网 时间:2024/05/16 12:15
1.判断当前的手机有没有连接互联网

//1.得到系统服务
ConnectivityManager manager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//2.得到网络信息对象
NetworkInfo networkInfo=manager.getActiveNetworkInfo()
//3.进行判断
if(networkInfo!=null && networkInfo.isConnected()){
    Log.d("zzz","已连接互联网");
}else{
   Log.d("zzz","未连接互联网");
}

注意:此段代码 需要添加权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


2.在连接互联网的情况下,判断网络类型

//1.得到网络类型
int type=netWorkInfo.getType()
switch(type){
case ConnectivityManager.TYPE_WIFI:
   Log.d("zzz","wifi");---wifi数据
break;
case ConnnectivityManager.TYPE_MOBILE:
     Log.d("zzz","mobile");--移动数据
break;
}

3.在连接互联网的情况下,如果是移动数据的话,判断具体是 什么类型的 2G/3G/4G

//得到详细的网络类型 wap 2G/3G/4G网络
  public void getDetailMobileNetType(NetworkInfo netInfo){

  String strNetworkType="";
  //得到整数类型
  int subtype = netInfo.getSubtype();
  //得到名子
  String _strSubTypeName=netInfo.getSubtypeName();

  switch(subtype){
  case TelephonyManager.NETWORK_TYPE_GPRS://联通2G
  case TelephonyManager.NETWORK_TYPE_EDGE://移动2G
  case TelephonyManager.NETWORK_TYPE_CDMA://电信2G
  case TelephonyManager.NETWORK_TYPE_1xRTT:
  case TelephonyManager.NETWORK_TYPE_IDEN: //api<8 : replace by 11
  strNetworkType = "2G";
  break;
  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: //api<9 : replace by 14
  case TelephonyManager.NETWORK_TYPE_EHRPD: //api<11 : replace by 12
  case TelephonyManager.NETWORK_TYPE_HSPAP: //api<13 : replace by 15
  strNetworkType = "3G";
  break;
  case TelephonyManager.NETWORK_TYPE_LTE: //api<11 : replace by 13
  strNetworkType = "4G";
  break;
  default:
  // http://baike.baidu.com/item/TD-SCDMA 中国移动 联通 电信 三种3G制式
  if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA") || _strSubTypeName.equalsIgnoreCase("CDMA2000"))
  {
  strNetworkType = "3G";
  }
  else
  {
  strNetworkType = _strSubTypeName;
  }

  break;

  }
  Log.d("zzz", "网络类型是:"+strNetworkType);

  }

4.如果手机没有连接互联网,则跳转到设置页面进行网络设置

   //弹出对话框
  AlertDialog.Builder builder=new Builder(this);
  builder.setTitle("网络设置提示");
  builder.setMessage("网络连接不可用,是否进行设置?");
  builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
  //跳转到系统“设置" 网络的界面
  Intent intent=new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
  startActivity(intent);
  }
  });
  builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

  @Override
  public void onClick(DialogInterface dialog, int which) {
  //关闭对话框
  dialog.dismiss();
  }
  });
  AlertDialog dialog = builder.create();
  dialog.show();
原创粉丝点击