现在的位置: 首页 > 综合 > 正文

WURFL的使用 – Stone的专栏 – CSDNBlog

2013年10月03日 ⁄ 综合 ⁄ 共 17233字 ⁄ 字号 评论关闭

导读:
  最近忙于中移动的MAS2.0的软件,MAS2.0的一个重要特点就是能支持移动化插件。说白点是能把一个供电脑访问的网站根据不同的手机类型,删除,修改其内容用以适应手机屏幕大小(使得手机只需要上下滚动,而不需要左右滚动)。
  网站提供手机访问的开发中经常需要根据不同的手机型号获得手机的性能,来决定提供哪些功能给手机访问者。这个在网站制作中用的很多,手机访问网站和电脑访问网站显示的内容在图片,视频,音频,屏幕宽度等等属性上都有所不同,不同的手机也各不相同。
  为了获取手机支持的属性,就需要用到UAProfile了,使用它可以根据http连接请求中的device_id来判断是什么类型的机器访问网站,还可以查询到这种型号的机器支持的分辨率,图片格式,网络脚本类型,缓存等等。其内容之详细完全可以支持网站的手机访问开发了。
  我用WURFL来获取UAProfile,其精髓就在WURFL.xml文件,现在最新版本是2007年11月18日更新的,大小6.68M。
  写了个很简单的代码去获得UAProfile并打印出来
  

import net.sourceforge.wurfl.wurflapi.*;
import java.util.*;
import java.io.*;
/** *//**
 *
 * 
@author chenyi
 
*/

public class Main ...{
    
/** *//** Creates a new instance of Main */
    
public Main() ...{
        System.setProperty(
"wurflpath","wurfl.xml");
        ListManager lm 
= ObjectsManager.getListManagerInstance();
        CapabilityMatrix cm 
= ObjectsManager.getCapabilityMatrixInstance();
        String id 
="motorola_a1000_ver1";
        HashMap deviceElementsList 
= lm.getDeviceElementsList();
        HashMap logr 
= lm.getListOfGroups();
        WurflDevice dev 
= (WurflDevice) deviceElementsList.get(id);
        String fb, ua;
        fb 
= dev.getFallBack();
//        ua = dev.getUserAgent();
//        
//        String model,brand;
//        model = cm.getCapabilityForDevice(id,"model_name");
//        brand = cm.getCapabilityForDevice(id,"brand_name");
        
        
if (!fb.equals("root"))...{
            Iterator keys 
= logr.keySet().iterator();
            
int i = 0;
            
while ( keys.hasNext() ) ...{
                String key 
= (String) keys.next();
                System.out.println(key);
                
//String key = (String) keys.next();
                ArrayList cap_list = (ArrayList)logr.get(key);
                Iterator capa_keys 
= cap_list.iterator();
                
while ( capa_keys.hasNext() ) ...{
                    String capa_key 
= (String) capa_keys.next();
                    String value 
= cm.getCapabilityForDevice(id,capa_key);
                    System.out.println(
"   "+capa_key+":   "+value);
                }

            }

            
//            keys = logr.keySet().iterator();
//            i = 0;
//            String color = null;
//            while ( keys.hasNext() ) {
//                String key = (String) keys.next();
//                ArrayList cap_list = (ArrayList)logr.get(key);
//                Iterator capa_keys = cap_list.iterator();
//                while ( capa_keys.hasNext() ) {
//                    String capa_key = (String) capa_keys.next();
//                    String value = cm.getCapabilityForDevice(id,capa_key);
//                    System.out.println(capa_key+":   "+value);
//                }
//            }
        }

    }

    
    
/** *//**
     * 
@param args the command line arguments
     
*/

    
public static void main(String[] args) ...{
        
// TODO code application logic here
        new Main();
    }

    
}

 

  我获取motorola_a1000_ver1的UAProfile最后打印出来的内容如下:
  flash_lite
  flash_lite_version:
  fl_wallpaper: false
  fl_screensaver: false
  fl_standalone: false
  fl_browser: false
  fl_sub_lcd: false
  display
  resolution_width: 208
  resolution_height: 320
  columns: 15
  max_image_width: 208
  max_image_height: 240
  rows: 20
  product_info
  brand_name: Motorola
  model_name: A1000
  unique: true
  ununiqueness_handler:
  is_wireless_device: true
  device_claims_web_support: true
  has_pointing_device: true
  has_qwerty_keyboard: false
  can_skip_aligned_link_row: true
  uaprof: http://motorola.handango.com/phoneconfig/a1000/Profile/a1000.rdf
  uaprof2:
  uaprof3:
  nokia_series: 0
  nokia_edition: 0
  device_os:
  mobile_browser:
  mobile_browser_version:
  image_format
  wbmp: true
  bmp: false
  epoc_bmp: false
  gif_animated: false
  jpg: true
  png: true
  tiff: false
  transparent_png_alpha: false
  transparent_png_index: false
  svgt_1_1: false
  svgt_1_1_plus: false
  greyscale: false
  gif: true
  colors: 65536
  xhtml_ui
  xhtml_honors_bgcolor: false
  xhtml_supports_forms_in_table: false
  xhtml_support_wml2_namespace: false
  xhtml_autoexpand_select: false
  xhtml_select_as_dropdown: false
  xhtml_select_as_radiobutton: false
  xhtml_select_as_popup: false
  xhtml_display_accesskey: false
  xhtml_supports_invisible_text: false
  xhtml_supports_inline_input: false
  xhtml_supports_monospace_font: false
  xhtml_supports_table_for_layout: false
  xhtml_supports_css_cell_table_coloring: false
  xhtml_format_as_css_property: false
  xhtml_format_as_attribute: false
  xhtml_nowrap_mode: false
  xhtml_marquee_as_css_property: false
  xhtml_readable_background_color1: #FFFFFF
  xhtml_readable_background_color2: #FFFFFF
  xhtml_allows_disabled_form_elements: false
  xhtml_document_title_support: true
  xhtml_preferred_charset: utf8
  opwv_xhtml_extensions_support: false
  xhtml_make_phone_call_string: tel:
  xhtmlmp_preferred_mime_type: text/html
  xhtml_table_support: true
  xhtml_send_sms_string: none
  xhtml_send_mms_string: none
  xhtml_supports_file_upload: false
  xhtml_file_upload: not_supported
  wta
  nokia_voice_call: false
  wta_voice_call: false
  wta_phonebook: false
  wta_misc: false
  wta_pdc: false
  storage
  max_deck_size: 4000
  max_url_length_in_requests: 0
  max_url_length_homepage: 0
  max_url_length_bookmark: 0
  max_url_length_cached_page: 0
  max_no_of_connection_settings: 0
  max_no_of_bookmarks: 0
  max_length_of_username: 0
  max_length_of_password: 0
  max_object_size: 0
  bugs
  post_method_support: true
  basic_authentication_support: true
  empty_option_value_support: true
  emptyok: false
  markup
  xhtml_support_level: 2
  preferred_markup: html_wi_oma_xhtmlmp_1_0
  wml_1_1: true
  wml_1_2: true
  wml_1_3: true
  html_wi_w3_xhtmlbasic: true
  html_wi_oma_xhtmlmp_1_0: true
  html_wi_imode_html_1: false
  html_wi_imode_html_2: false
  html_wi_imode_html_3: false
  html_wi_imode_html_4: false
  html_wi_imode_html_5: false
  html_wi_imode_htmlx_1: false
  html_wi_imode_htmlx_1_1: false
  html_wi_imode_compact_generic: true
  html_web_3_2: true
  html_web_4_0: true
  voicexml: false
  multipart_support: true
  cache
  total_cache_disable_support: false
  time_to_live_support: false
  chtml_ui
  chtml_display_accesskey: false
  emoji: false
  chtml_can_display_images_and_text_on_same_line: false
  chtml_displays_image_in_center: false
  imode_region: none
  chtml_make_phone_call_string: tel:
  chtml_table_support: false
  sound_format
  wav: true
  mmf: true
  smf: true
  mld: false
  midi_monophonic: true
  midi_polyphonic: true
  sp_midi: true
  rmf: false
  xmf: true
  compactmidi: false
  digiplug: false
  nokia_ringtone: false
  imelody: true
  au: false
  amr: true
  awb: true
  aac: true
  mp3: true
  voices: 24
  qcelp: false
  evrc: false
  wml_ui
  proportional_font: false
  built_in_back_button_support: false
  card_title_support: true
  softkey_support: false
  table_support: true
  numbered_menus: false
  menu_with_select_element_recommended: false
  menu_with_list_of_links_recommended: true
  icons_on_menu_items_support: false
  break_list_of_links_with_br_element_recommended: true
  access_key_support: false
  wrap_mode_support: false
  times_square_mode_support: false
  deck_prefetch_support: false
  elective_forms_recommended: true
  wizards_recommended: false
  image_as_link_support: false
  insert_br_element_after_widget_recommended: false
  wml_can_display_images_and_text_on_same_line: false
  wml_displays_image_in_center: false
  opwv_wml_extensions_support: false
  wml_make_phone_call_string: wtai://wp/mc;
  drm
  oma_v_1_0_forwardlock: true
  oma_v_1_0_combined_delivery: true
  oma_v_1_0_separate_delivery: true
  sms
  nokiaring: false
  picturemessage: false
  operatorlogo: false
  largeoperatorlogo: false
  callericon: false
  nokiavcard: false
  nokiavcal: false
  sckl_ringtone: false
  sckl_operatorlogo: false
  sckl_groupgraphic: false
  sckl_vcard: false
  sckl_vcalendar: false
  text_imelody: false
  ems: true
  ems_variablesizedpictures: false
  ems_imelody: false
  ems_odi: false
  ems_upi: false
  ems_version: 0
  siemens_ota: false
  siemens_logo_width: 101
  siemens_logo_height: 29
  siemens_screensaver_width: 101
  siemens_screensaver_height: 50
  gprtf: false
  sagem_v1: false
  sagem_v2: false
  panasonic: false
  wap_push
  wap_push_support: false
  connectionless_service_indication: false
  connectionless_service_load: false
  connectionless_cache_operation: false
  connectionoriented_unconfirmed_service_indication: false
  connectionoriented_unconfirmed_service_load: false
  connectionoriented_unconfirmed_cache_operation: false
  connectionoriented_confirmed_service_indication: false
  connectionoriented_confirmed_service_load: false
  connectionoriented_confirmed_cache_operation: false
  utf8_support: false
  ascii_support: false
  iso8859_support: false
  expiration_date: false
  mms
  receiver: true
  sender: true
  mms_max_size: 2000000
  mms_max_height: 480
  mms_max_width: 640
  built_in_recorder: true
  built_in_camera: true
  mms_jpeg_baseline: true
  mms_jpeg_progressive: true
  mms_gif_static: true
  mms_gif_animated: true
  mms_png: true
  mms_bmp: true
  mms_wbmp: true
  mms_amr: true
  mms_wav: false
  mms_midi_monophonic: true
  mms_midi_polyphonic: true
  mms_midi_polyphonic_voices: 24
  mms_spmidi: true
  mms_mmf: false
  mms_mp3: true
  mms_evrc: false
  mms_qcelp: false
  mms_ota_bitmap: false
  mms_nokia_wallpaper: false
  mms_nokia_operatorlogo: false
  mms_nokia_3dscreensaver: false
  mms_nokia_ringingtone: false
  mms_rmf: false
  mms_xmf: false
  mms_symbian_install: false
  mms_jar: false
  mms_jad: false
  mms_vcard: false
  mms_vcalendar: false
  mms_wml: false
  mms_wbxml: false
  mms_wmlc: false
  mms_video: false
  mms_mp4: false
  mms_3gpp: false
  mms_3gpp2: false
  mms_max_frame_rate: 0
  security
  https_support: true
  https_detectable: false
  phone_id_provided: false
  streaming
  streaming_video: true
  streaming_real_media_8: false
  streaming_real_media_9: false
  streaming_real_media_10: false
  streaming_3gpp: false
  streaming_mp4: true
  streaming_wmv: false
  streaming_mov: false
  streaming_video_qcif: false
  streaming_video_qcif_max_width: 0
  streaming_video_qcif_max_height: 0
  streaming_video_sqcif: false
  streaming_video_sqcif_max_width: 0
  streaming_video_sqcif_max_height: 0
  streaming_video_max_bit_rate: 0
  streaming_video_max_video_bit_rate: 0
  streaming_video_min_video_bit_rate: 0
  streaming_video_max_audio_bit_rate: 0
  streaming_video_max_frame_rate: 0
  streaming_video_size_limit: 0
  streaming_video_vcodec_h263_0: false
  streaming_video_vcodec_h263_3: false
  streaming_video_vcodec_mpeg4: false
  streaming_video_acodec_amr: false
  streaming_video_acodec_awb: false
  streaming_video_acodec_aac: false
  streaming_video_acodec_aac_ltp: false
  object_download
  downloadfun_support: false
  directdownload_support: true
  inline_support: false
  oma_support: false
  ringtone: true
  ringtone_midi_monophonic: true
  ringtone_midi_polyphonic: true
  ringtone_imelody: true
  ringtone_digiplug: false
  ringtone_compactmidi: false
  ringtone_mmf: true
  ringtone_rmf: false
  ringtone_xmf: true
  ringtone_amr: true
  ringtone_awb: true
  ringtone_aac: false
  ringtone_wav: true
  ringtone_mp3: true
  ringtone_spmidi: true
  ringtone_qcelp: false
  ringtone_voices: 24
  ringtone_df_size_limit: 0
  ringtone_directdownload_size_limit: 0
  ringtone_inline_size_limit: 0
  ringtone_oma_size_limit: 0
  wallpaper: true
  wallpaper_max_width: 208
  wallpaper_max_height: 320
  wallpaper_preferred_width: 208
  wallpaper_preferred_height: 256
  wallpaper_resize: none
  wallpaper_wbmp: true
  wallpaper_bmp: false
  wallpaper_gif: true
  wallpaper_jpg: true
  wallpaper_png: true
  wallpaper_tiff: false
  wallpaper_greyscale: false
  wallpaper_colors: 16
  wallpaper_df_size_limit: 0
  wallpaper_directdownload_size_limit: 0
  wallpaper_inline_size_limit: 0
  wallpaper_oma_size_limit: 0
  screensaver: false
  screensaver_max_width: 0
  screensaver_max_height: 0
  screensaver_preferred_width: 0
  screensaver_preferred_height: 0
  screensaver_resize: none
  screensaver_wbmp: false
  screensaver_bmp: false
  screensaver_gif: false
  screensaver_jpg: false
  screensaver_png: false
  screensaver_greyscale: false
  screensaver_colors: 2
  screensaver_df_size_limit: 0
  screensaver_directdownload_size_limit: 0
  screensaver_inline_size_limit: 0
  screensaver_oma_size_limit: 0
  picture: false
  picture_max_width: 0
  picture_max_height: 0
  picture_preferred_width: 0
  picture_preferred_height: 0
  picture_resize: none
  picture_wbmp: false
  picture_bmp: false
  picture_gif: false
  picture_jpg: false
  picture_png: false
  picture_greyscale: false
  picture_colors: 2
  picture_df_size_limit: 0
  picture_directdownload_size_limit: 0
  picture_inline_size_limit: 0
  picture_oma_size_limit: 0
  video: true
  video_real_media_8: false
  video_real_media_9: false
  video_real_media_10: false
  video_3gpp: false
  video_3gpp2: false
  video_mp4: true
  video_wmv: true
  video_mov: false
  video_max_frame_rate: 15
  video_max_width: 176
  video_max_height: 144
  video_qcif: true
  video_sqcif: true
  video_preferred_width: 0
  video_preferred_height: 0
  video_df_size_limit: 0
  video_directdownload_size_limit: 0
  video_inline_size_limit: 0
  video_oma_size_limit: 0
  video_vcodec_h263_0: true
  video_vcodec_h263_3: false
  video_vcodec_h264: false
  video_vcodec_mpeg4: true
  video_acodec_amr: true
  video_acodec_awb: false
  video_acodec_aac: true
  video_acodec_aac_ltp: false
  video_acodec_qcelp: false
  ringtone_3gpp: false
  bearer
  max_data_rate: 9
  wifi: false
  j2me
  j2me_cldc_1_0: true
  j2me_cldc_1_1: false
  j2me_midp_1_0: true
  j2me_midp_2_0: true
  doja_1_0: false
  doja_1_5: false
  doja_2_0: false
  doja_2_1: false
  doja_2_2: false
  doja_3_0: false
  doja_3_5: false
  doja_4_0: false
  j2me_jtwi: true
  j2me_mmapi_1_0: true
  j2me_mmapi_1_1: false
  j2me_wmapi_1_0: true
  j2me_wmapi_1_1: false
  j2me_wmapi_2_0: false
  j2me_btapi: false
  j2me_3dapi: false
  j2me_loctapi: false
  j2me_nokia_ui: false
  j2me_motorola_lwt: false
  j2me_siemens_color_game: false
  j2me_siemens_extension: false
  j2me_heap_size: 16777216
  j2me_max_jar_size: 25165824
  j2me_storage_size: 25165824
  j2me_max_record_store_size: 25165824
  j2me_screen_width: 208
  j2me_screen_height: 320
  j2me_canvas_width: 208
  j2me_canvas_height: 180
  j2me_bits_per_pixel: 16
  j2me_audio_capture_enabled: false
  j2me_video_capture_enabled: false
  j2me_photo_capture_enabled: false
  j2me_capture_image_formats: none
  j2me_http: true
  j2me_https: true
  j2me_socket: true
  j2me_udp: true
  j2me_serial: false
  j2me_gif: false
  j2me_gif89a: false
  j2me_jpg: true
  j2me_png: true
  j2me_bmp: false
  j2me_bmp3: false
  j2me_wbmp: false
  j2me_midi: true
  j2me_wav: true
  j2me_amr: true
  j2me_mp3: false
  j2me_mp4: false
  j2me_imelody: false
  j2me_rmf: false
  j2me_au: false
  j2me_aac: false
  j2me_realaudio: false
  j2me_xmf: false
  j2me_wma: false
  j2me_3gpp: false
  j2me_h263: false
  j2me_svgt: false
  j2me_mpeg4: true
  j2me_realvideo: false
  j2me_real8: false
  j2me_realmedia: false
  j2me_left_softkey_code: 21
  j2me_right_softkey_code: 22
  j2me_middle_softkey_code: 23
  j2me_select_key_code: 0
  j2me_return_key_code: 0
  j2me_clear_key_code: 0
  j2me_datefield_no_accepts_null_date: false
  j2me_datefield_broken: false
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1909521

本文转自
http://blog.csdn.net/njchenyi/archive/2007/11/30/1909521.aspx

 

 

 

WURFL Devices and WURFL Capabilities

http://wurfl.sourceforge.net/help_doc.php
This document gives a short description of the WURFL tags and a complete list of all the capabilities (as of August 2007)

WURFL Devices
WURFL devices contain the user-agent string, fall_back attribute and unique ID. There may also be an attribute (actual_device_root="true") that marks a device as "real". This attribute can be useful for APIs that intend to use the WURFl to compile human-readable list of devices.
Here is a sample WURFL entry that defines a device:

<device user_agent="O2-X1i"

        actual_device_root="true"

        fall_back="opwv_v61_generic"

        id="o2_x1i_ver1">


Groups:
Groups are only meant to make the WURFL more readable to humans. Group names are self-explaining. For example, there is a group called "mms" for capabilities regarding MMS messaging, another group called "wml_ui" for capabilities about how devices support WML tags and how they display them.
Here is an example of a group can be defined:

<group id="sound_format">


Capabilities:
Capabilities are collected in groups for readability. We cannot have two capabilities by the same name (i.e. "name" attribute) even in when in two different groups. More concisely, each capability name is unique.
Capabilities always have a value. Value can represent a boolean, a number or a string. A capability looks something like this:

<capability name="aac" value="true"/>

WURFL capabilities.
Some capabilities are meant to be used by themselves, some others should be used in combination.
If you want to know if a device is able to show a gif image in a page you should simply check if the capability "gif" is set to true. On the other side all the capabilities listed in the xhtml_ui group are only meant for xHTML presentation, so it's useless to check if "xhtml_honors_bgcolor" is set to true if you are generating an HTML 4.0 page. The "xhtml_honors_bgcolor" may be used in combination with the capabilities listed in the "markup" group. You will first check if xHTML-MP is supported (html_wi_oma_xhtmlmp_1_0), if so, you may check "xhtml_honors_bgcolor" and you may use tags about it only in an xHTML page.
If you have doubts about how to use a capability you may ask on the wmlprogramming list. Make sure you check the archives, before asking, someone might have already asked the same question!

Here are all the capabilities in the WURFL today:

select group: [product_info | wml_ui | chtml_ui | xhtml_ui | ajax | markup | cache | display | image_format | bugs | wta | security | bearer | storage | object_download | wap_push | drm | streaming | mms | j2me | sms | sound_format | flash_lite]

Group:product_info (human readable brand and model name and other generic info)

Capability Name

Type

Description

brand_name

string

Brand

model_name

string

Model

unique

true/false

UA is repetead for different devices (rare, but deadly occurence)

ununiqueness_handler

String

How to handle a non-unique User-agent String (API/framework may support specific mechanism to handle HTTP request directly)

is_wireless_device

抱歉!评论已关闭.