天天看點

Java servlet判斷是否是移動裝置

移動裝置指手機和pad

Java servlet判斷是否是移動裝置

/** 

     * 判斷手機的作業系統 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;  

    }  

 應用:

Java servlet判斷是否是移動裝置

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());  

 運作結果:

Java servlet判斷是否是移動裝置