Java servlet判断是否是移动设备

使用Java  servlet如何判断访问介质是否是移动设备呢?

移动设备指手机和pad

Java代码   收藏代码
  1. /** 
  2.      * 判断手机的操作系统 IOS/android/windows phone/BlackBerry 
  3.      *  
  4.      * @param UA 
  5.      * @return 
  6.      */  
  7.     public static ClientOsInfo getMobilOS(String UA) {  
  8.         UA=UA.toUpperCase();  
  9.         if (UA == null) {  
  10.             return null;  
  11.         }  
  12.         ClientOsInfo osInfo=new  ClientOsInfo();  
  13.         // 存放正则表达式  
  14.         String rex = "";  
  15.         // IOS 判断字符串  
  16.         String iosString = " LIKE MAC OS X";  
  17.         if (UA.indexOf(iosString) != -1) {  
  18.             if(isMatch(UA, "\\([\\s]*iPhone[\\s]*;", Pattern.CASE_INSENSITIVE)){  
  19.                 osInfo.setDeviceType(DEVICE_TYPE_PHONE);  
  20.             }else if(isMatch(UA, "\\([\\s]*iPad[\\s]*;", Pattern.CASE_INSENSITIVE)){  
  21.                 osInfo.setDeviceType(DEVICE_TYPE_PAD);  
  22.             }  
  23.             rex = ".*" + "[\\s]+(\\d[_\\d]*)" + iosString;  
  24.             Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE);  
  25.             Matcher m = p.matcher(UA);  
  26.             boolean rs = m.find();  
  27.             if (rs) {  
  28.                 String osVersion= m.group(1).replace("_"".");  
  29.                 osInfo.setVersion(osVersion);  
  30. //              System.out.println("Mobil OS is" + " IOS" +osVersion);  
  31.                 osInfo.setOsTypeVersion(OSTYPE_IOS+"_" + osVersion);  
  32.                 return osInfo;  
  33.             }  
  34.             System.out.println("IOS");  
  35.             osInfo.setOsTypeVersion(OSTYPE_IOS);  
  36.             return osInfo;  
  37.         }  
  38.         // Android 判断  
  39.         String androidString = "ANDROID";  
  40.         if (UA.indexOf(androidString) != -1) {  
  41.             if(isMatch(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)){  
  42.                 osInfo.setDeviceType(DEVICE_TYPE_PHONE);  
  43.             }else {  
  44.                 osInfo.setDeviceType(DEVICE_TYPE_PAD);  
  45.             }  
  46.             rex = ".*" + androidString + "[\\s]*(\\d*[\\._\\d]*)";  
  47.             Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE);  
  48.             Matcher m = p.matcher(UA);  
  49.             boolean rs = m.find();  
  50.             if (rs) {  
  51.                 String version=m.group(1).replace("_"".");  
  52.                 osInfo.setVersion(version);  
  53.                 System.out.println("Mobil OS is " + OSTYPE_ANDROID + version);  
  54.                 osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_" + version);  
  55.                 return osInfo;  
  56.             }  
  57.             System.out.println("Android");  
  58.             osInfo.setOsTypeVersion(OSTYPE_ANDROID);  
  59.             return osInfo;  
  60.         }  
  61.         // windows phone 判断  
  62.         String wpString = "WINDOWS PHONE";  
  63.         if (UA.indexOf(wpString) != -1) {  
  64.             rex = ".*" + wpString + "[\\s]*[OS\\s]*([\\d][\\.\\d]*)";  
  65.             Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE);  
  66.             Matcher m = p.matcher(UA);  
  67.             boolean rs = m.find();  
  68.             if (rs) {  
  69.                 System.out.println("Mobil OS is " + OSTYPE_WP + m.group(1));  
  70.                 String version=m.group(1);  
  71.                 osInfo.setVersion(version);  
  72.                 osInfo.setOsTypeVersion(OSTYPE_WP+"_" + version);  
  73.                 return osInfo;  
  74.             }  
  75.             System.out.println("WINDOWS PHONE");  
  76.             osInfo.setOsTypeVersion(OSTYPE_WP);  
  77.             return osInfo;  
  78.         }  
  79.         // BlackBerry 黑莓系统判断  
  80.         String bbString = "BLACKBERRY";  
  81.         if (UA.indexOf(bbString) != -1) {  
  82.             rex = ".*" + bbString + "[\\s]*([\\d]*)";  
  83.             Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE);  
  84.             Matcher m = p.matcher(UA);  
  85.             boolean rs = m.find();  
  86.             if (rs) {  
  87.                 System.out.println("Mobil OS is" + " BLACKBERRY " + m.group(1));  
  88.                 String version=m.group(1);  
  89.                 osInfo.setVersion(version);  
  90.                 osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY+"_" + version);  
  91.                 return osInfo;  
  92.             }  
  93.             System.out.println("BLACKBERRY");  
  94.             osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY);  
  95.             return osInfo;  
  96.         }  
  97.         if(UA.contains("LINUX")){//android  
  98.             if(isMatch(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)){  
  99.                 osInfo.setDeviceType(DEVICE_TYPE_PHONE);  
  100.             }else {  
  101.                 osInfo.setDeviceType(DEVICE_TYPE_PAD);  
  102.             }  
  103.               
  104.              Pattern p = Pattern.compile("U;\\s*(Adr[\\s]*)?(\\d[\\.\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE);  
  105.                 Matcher m = p.matcher(UA);  
  106.                 boolean result = m.find();  
  107.                 String find_result = null;  
  108.                 if (result)  
  109.                 {  
  110.                     find_result = m.group(2);  
  111.                 }  
  112.                 if(ValueWidget.isNullOrEmpty(find_result)){  
  113.                     osInfo.setOsTypeVersion(OSTYPE_ANDROID);  
  114.                     return osInfo;  
  115.                 }else{  
  116.                     osInfo.setVersion(find_result);  
  117.                     osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_"+find_result);  
  118.                     return osInfo;  
  119.                 }  
  120.         }  
  121.           
  122.         //UCWEB/2.0 (iOS; U; iPh OS 4_3_2; zh-CN; iPh4)  
  123.         if(UA.matches(".*((IOS)|(iPAD)).*(IPH).*")){  
  124.             if(isMatch(UA, "[\\s]*iPh[\\s]*", Pattern.CASE_INSENSITIVE)){  
  125.                 osInfo.setDeviceType(DEVICE_TYPE_PHONE);  
  126.             }else {  
  127.                 osInfo.setDeviceType(DEVICE_TYPE_PAD);  
  128.             }  
  129.              Pattern p = Pattern.compile("U;\\s*(IPH[\\s]*)?(OS[\\s]*)?(\\d[\\._\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE);  
  130.                 Matcher m = p.matcher(UA);  
  131.                 boolean result = m.find();  
  132.                 String find_result = null;  
  133.                 if (result)  
  134.                 {  
  135.                     find_result = m.group(3);  
  136.                 }  
  137.                 if(ValueWidget.isNullOrEmpty(find_result)){  
  138.                     osInfo.setOsTypeVersion(OSTYPE_IOS);  
  139.                     return osInfo;  
  140.                 }else{  
  141.                     String version=find_result.replace("_"".");  
  142.                     osInfo.setVersion(version);  
  143.                     osInfo.setOsTypeVersion(OSTYPE_IOS+"_"+version);  
  144.                     return osInfo;  
  145.                 }  
  146.         }  
  147.         return osInfo;  
  148.     }  

 应用:

Java代码   收藏代码
  1. String userAgent=request.getHeader("user-agent");  
  2.         ClientOsInfo info= HeaderUtil.getMobilOS(userAgent);  
  3.         System.out.println("device type:\t"+info.getDeviceType());  
  4.         System.out.println("type version:\t"+info.getOsTypeVersion());  
  5.         System.out.println("version:\t"+info.getVersion());  
  6.         System.out.println("是移动设备吗:"+info.isMobile());  

 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值