本文共 4545 字,大约阅读时间需要 15 分钟。
使用 servlet如何判断访问介质是否是移动设备呢?
移动设备指手机和pad
-
-
-
-
-
-
- public static ClientOsInfo getMobilOS(String UA) {
- UA=UA.toUpperCase();
- if (UA == null) {
- return null;
- }
- ClientOsInfo osInfo=new ClientOsInfo();
-
- String rex = "";
-
- 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);
-
- osInfo.setOsTypeVersion(OSTYPE_IOS+"_" + osVersion);
- return osInfo;
- }
- System.out.println("IOS");
- osInfo.setOsTypeVersion(OSTYPE_IOS);
- return osInfo;
- }
-
- 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;
- }
-
- 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;
- }
-
- 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")){
- 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;
- }
- }
-
-
- 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());
运行结果:
转载地址:http://xgdvl.baihongyu.com/