Java servlet判断是否是移动设备
使用Java ?servlet如何判断访问介质是否是移动设备呢?
移动设备指手机和pad
/** * 判断手机的操作系统 IOS/android/windows phone/BlackBerry * * @param UA * @return */ public static ClientOsInfo getMobilOS(String UA) { UA=UA.toUpperCase(); if (UA == null) { return null; } ClientOsInfo osInfo=new ClientOsInfo(); // 存放正则表达式 String rex = ""; // IOS 判断字符串 String iosString = " LIKE MAC OS X"; if (UA.indexOf(iosString) != -1) { if(isMatch(UA, "\\([\\s]*iPhone[\\s]*;", Pattern.CASE_INSENSITIVE)){ osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else if(isMatch(UA, "\\([\\s]*iPad[\\s]*;", Pattern.CASE_INSENSITIVE)){ osInfo.setDeviceType(DEVICE_TYPE_PAD); } rex = ".*" + "[\\s]+(\\d[_\\d]*)" + iosString; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { String osVersion= m.group(1).replace("_", "."); osInfo.setVersion(osVersion); // System.out.println("Mobil OS is" + " IOS" +osVersion); osInfo.setOsTypeVersion(OSTYPE_IOS+"_" + osVersion); return osInfo; } System.out.println("IOS"); osInfo.setOsTypeVersion(OSTYPE_IOS); return osInfo; } // Android 判断 String androidString = "ANDROID"; if (UA.indexOf(androidString) != -1) { if(isMatch(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)){ osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else { osInfo.setDeviceType(DEVICE_TYPE_PAD); } rex = ".*" + androidString + "[\\s]*(\\d*[\\._\\d]*)"; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { String version=m.group(1).replace("_", "."); osInfo.setVersion(version); System.out.println("Mobil OS is " + OSTYPE_ANDROID + version); osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_" + version); return osInfo; } System.out.println("Android"); osInfo.setOsTypeVersion(OSTYPE_ANDROID); return osInfo; } // windows phone 判断 String wpString = "WINDOWS PHONE"; if (UA.indexOf(wpString) != -1) { rex = ".*" + wpString + "[\\s]*[OS\\s]*([\\d][\\.\\d]*)"; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { System.out.println("Mobil OS is " + OSTYPE_WP + m.group(1)); String version=m.group(1); osInfo.setVersion(version); osInfo.setOsTypeVersion(OSTYPE_WP+"_" + version); return osInfo; } System.out.println("WINDOWS PHONE"); osInfo.setOsTypeVersion(OSTYPE_WP); return osInfo; } // BlackBerry 黑莓系统判断 String bbString = "BLACKBERRY"; if (UA.indexOf(bbString) != -1) { rex = ".*" + bbString + "[\\s]*([\\d]*)"; Pattern p = Pattern.compile(rex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean rs = m.find(); if (rs) { System.out.println("Mobil OS is" + " BLACKBERRY " + m.group(1)); String version=m.group(1); osInfo.setVersion(version); osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY+"_" + version); return osInfo; } System.out.println("BLACKBERRY"); osInfo.setOsTypeVersion(OSTYPE_BLACKBERRY); return osInfo; } if(UA.contains("LINUX")){//android if(isMatch(UA, "\\bMobi", Pattern.CASE_INSENSITIVE)){ osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else { osInfo.setDeviceType(DEVICE_TYPE_PAD); } Pattern p = Pattern.compile("U;\\s*(Adr[\\s]*)?(\\d[\\.\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean result = m.find(); String find_result = null; if (result) { find_result = m.group(2); } if(ValueWidget.isNullOrEmpty(find_result)){ osInfo.setOsTypeVersion(OSTYPE_ANDROID); return osInfo; }else{ osInfo.setVersion(find_result); osInfo.setOsTypeVersion(OSTYPE_ANDROID+"_"+find_result); return osInfo; } } //UCWEB/2.0 (iOS; U; iPh OS 4_3_2; zh-CN; iPh4) if(UA.matches(".*((IOS)|(iPAD)).*(IPH).*")){ if(isMatch(UA, "[\\s]*iPh[\\s]*", Pattern.CASE_INSENSITIVE)){ osInfo.setDeviceType(DEVICE_TYPE_PHONE); }else { osInfo.setDeviceType(DEVICE_TYPE_PAD); } Pattern p = Pattern.compile("U;\\s*(IPH[\\s]*)?(OS[\\s]*)?(\\d[\\._\\d]*\\d)[\\s]*;",Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(UA); boolean result = m.find(); String find_result = null; if (result) { find_result = m.group(3); } if(ValueWidget.isNullOrEmpty(find_result)){ osInfo.setOsTypeVersion(OSTYPE_IOS); return osInfo; }else{ String version=find_result.replace("_", "."); osInfo.setVersion(version); osInfo.setOsTypeVersion(OSTYPE_IOS+"_"+version); return osInfo; } } return osInfo; }
?应用:
String userAgent=request.getHeader("user-agent"); ClientOsInfo info= HeaderUtil.getMobilOS(userAgent); System.out.println("device type:\t"+info.getDeviceType()); System.out.println("type version:\t"+info.getOsTypeVersion()); System.out.println("version:\t"+info.getVersion()); System.out.println("是移动设备吗:"+info.isMobile());
?运行结果:
?
源代码见附件:io0007-find_progess.zip
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。