移動裝置指手機和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)){
}else {
rex = ".*" + androidstring + "[\\s]*(\\d*[\\._\\d]*)";
string version=m.group(1).replace("_", ".");
osinfo.setversion(version);
system.out.println("mobil os is " + ostype_android + version);
osinfo.setostypeversion(ostype_android+"_" + version);
system.out.println("android");
osinfo.setostypeversion(ostype_android);
// windows phone 判斷
string wpstring = "windows phone";
if (ua.indexof(wpstring) != -1) {
rex = ".*" + wpstring + "[\\s]*[os\\s]*([\\d][\\.\\d]*)";
system.out.println("mobil os is " + ostype_wp + m.group(1));
string version=m.group(1);
osinfo.setostypeversion(ostype_wp+"_" + version);
system.out.println("windows phone");
osinfo.setostypeversion(ostype_wp);
// blackberry 黑莓系統判斷
string bbstring = "blackberry";
if (ua.indexof(bbstring) != -1) {
rex = ".*" + bbstring + "[\\s]*([\\d]*)";
system.out.println("mobil os is" + " blackberry " + m.group(1));
osinfo.setostypeversion(ostype_blackberry+"_" + version);
system.out.println("blackberry");
osinfo.setostypeversion(ostype_blackberry);
if(ua.contains("linux")){//android
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);
//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)){
pattern p = pattern.compile("u;\\s*(iph[\\s]*)?(os[\\s]*)?(\\d[\\._\\d]*\\d)[\\s]*;",pattern.case_insensitive);
find_result = m.group(3);
osinfo.setostypeversion(ostype_ios);
string version=find_result.replace("_", ".");
osinfo.setversion(version);
osinfo.setostypeversion(ostype_ios+"_"+version);
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());
運作結果: