Android获取浏览器User Agent

获取浏览器User Agent的代码:

[java]  view plain copy
  1.       WebView webview;  
  2. webview = new WebView(this);  
  3. webview.layout(0000);  
  4. WebSettings settings = webview.getSettings();  
  5. String ua = settings.getUserAgentString();  
  6. Log.e("HJJ""User Agent:" + ua);  
我们来看看getUserAgentString源代码:

[java]  view plain copy
  1. public synchronized String getUserAgentString() {  
  2.     if (DESKTOP_USERAGENT.equals(mUserAgent) ||  
  3.             IPHONE_USERAGENT.equals(mUserAgent) ||  
  4.             !mUseDefaultUserAgent) {  
  5.         return mUserAgent;  
  6.     }  
  7.   
  8.     boolean doPostSync = false;  
  9.     synchronized(sLockForLocaleSettings) {  
  10.         Locale currentLocale = Locale.getDefault();  
  11.         if (!sLocale.equals(currentLocale)) {  
  12.             sLocale = currentLocale;  
  13.             mUserAgent = getCurrentUserAgent();  
  14.             mAcceptLanguage = getCurrentAcceptLanguage();  
  15.             doPostSync = true;  
  16.         }  
  17.     }  
  18.     if (doPostSync) {  
  19.         postSync();  
  20.     }  
  21.     return mUserAgent;  
  22. }  

[java]  view plain copy
  1. private synchronized String getCurrentUserAgent() {  
  2.     Locale locale;  
  3.     synchronized(sLockForLocaleSettings) {  
  4.         locale = sLocale;  
  5.     }  
  6.     StringBuffer buffer = new StringBuffer();  
  7.     // Add version  
  8.     final String version = Build.VERSION.RELEASE;  
  9.     if (version.length() > 0) {  
  10.         buffer.append(version);  
  11.     } else {  
  12.         // default to "1.0"  
  13.         buffer.append("1.0");  
  14.     }    
  15.     buffer.append("; ");  
  16.     final String language = locale.getLanguage();  
  17.     if (language != null) {  
  18.         buffer.append(language.toLowerCase());  
  19.         final String country = locale.getCountry();  
  20.         if (country != null) {  
  21.             buffer.append("-");  
  22.             buffer.append(country.toLowerCase());  
  23.         }  
  24.     } else {  
  25.         // default to "en"  
  26.         buffer.append("en");  
  27.     }  
  28.     // add the model for the release build  
  29.     if ("REL".equals(Build.VERSION.CODENAME)) {  
  30.         final String model = Build.MODEL;  
  31.         if (model.length() > 0) {  
  32.             buffer.append("; ");  
  33.             buffer.append(model);  
  34.         }  
  35.     }  
  36.     final String id = Build.ID;  
  37.     if (id.length() > 0) {  
  38.         buffer.append(" Build/");  
  39.         buffer.append(id);  
  40.     }  
  41.     final String base = mContext.getResources().getText(  
  42.             com.android.internal.R.string.web_user_agent).toString();  
  43.     return String.format(base, buffer);  
  44. }  

如我获取到自己手机的UA如下:

[html]  view plain copy
  1. Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; U8817 Build/MocorDroid4.0.3) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1  

显然它是这样组成的:

首先,web_user_agent的代码为:

[java]  view plain copy
  1. Mozilla/5.0 (Linux; U; Android %s) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1  

其中%s为构造的buffer。

对应如下:

4.0.3    Build.VERSION.RELEASE  
U8817 如果Build.VERSION.CODENAME.equal("REL"),哪么值为Build.MODEL
MocorDroid4.0.3  值为Build.ID

你可能感兴趣的:(user,agent)