1. 程式人生 > >Android獲取以及修改WebView的UserAgent

Android獲取以及修改WebView的UserAgent

User Agent中文名為使用者代理,是Http協議中的一部分,屬於頭域的組成部分,User Agent也簡稱UA

是什麼:它是一個特殊字串頭,是一種向訪問網站提供你所使用的瀏覽器型別及版本、作業系統及版本、瀏覽器核心、等資訊的標識。

什麼用:通過這個標識,使用者所訪問的網站可以顯示不同的排版從而為使用者提供更好的體驗或者進行資訊統計;例如用手機訪問谷歌和電腦訪問是不一樣的,這些是谷歌根據訪問者的UA來判斷的。

對於Android開發者,如何獲取UserAgent:

1.首先在你的Activity對應的xml佈局檔案中加入WebView控制元件:

  1. <WebView
  2.        android:id
    ="@+id/id_wv_ua"
  3.        android:layout_width="match_parent"
  4.        android:layout_height="match_parent"></WebView>

2.在Activity中加如下程式碼:
  1. public class Ano extends Activity {  
  2.     private WebView webview;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_ano);  
  7.         webview = (WebView) this.findViewById(R.id.id_wv_ua);  
  8.         // 得到WebSettings物件  
  9.         WebSettings settings = webview.getSettings();  
  10.         // 如果訪問的頁面中有JavaScript,則WebView必須設定支援JavaScript,否則顯示空白頁面  
  11.         webview.getSettings().setJavaScriptEnabled(true);  
  12.         // 獲取到UserAgentString  
  13.         String userAgent = settings.getUserAgentString();  
  14.         // 列印結果  
  15.         Log.i("TAG", "User Agent:" + userAgent);  
  16.     }  
  17. }  

最後,如果你想讓WebView能夠載入來自網路的頁面,別忘了在AndroidManifest.xml檔案中加入INTERNET許可權。
  1. <uses-permissionandroid:name="android.permission.INTERNET"/>

輸出結果:


截圖字型有點小,可以在上面圖片上點選右鍵,選擇在新標籤頁中開啟圖片。

或者看下面輸出結果,以下就是userAgent的內容:

I/TAG: User Agent:Mozilla/5.0 (Linux; Android 4.4.4; SAMSUNG-SM-N900A Build/tt) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36

修改:

為了便於WEB端統計分析,需要將APP的 user-agent 作特徵標記,所以搜尋了一下webview的User-Agent設定方法,具體如下:

// 修改ua使得web端正確判斷  
String ua = webview.getSettings().getUserAgentString();  
webview.getSettings().setUserAgentString(ua+"; 自定義標記");
WebSettings settings = webview.getSettings();  
        settings.setUserAgentString("app/XXX");//新增UA,  “app/XXX”:是與h5商量好的標識,h5確認UA為app/XXX就認為該請求的終端為App  
        settings.setJavaScriptEnabled(true);  
  
        //設定引數  
        settings.setBuiltInZoomControls(true);  
        settings.setAppCacheEnabled(true);// 設定快取  
  
        webview.setWebChromeClient(new WebChromeClient());  
  
        webview.loadUrl(loadurl);