2011-04-12 22 views
1

我可以問WebView.getWebSettings().getUserAgentString()來獲得用戶 代理,但這並不爲我的應用程序工作那麼好,因爲我需要 實例化一個WebView第一,即使我不需要。獲取用戶代理不包含網頁視圖

是否有另一種方式不使用WebView.getSetting,而到達用戶代理?因爲在我的應用程序中,我不需要webView

幫助我,請

+0

這是webView.getSettings(),其中Webview是一個實例的WebView不是類 – Bostone 2012-11-19 16:39:18

回答

2

你要麼初始化一個網頁視圖,然後摧毀它,或者只是硬編碼的用戶代理字符串(在運行時語言等代替)。

+0

這wath我做了:),謝謝 – Houcine 2011-04-19 14:29:39

1

你可以看到它是如何通過查看源

http://www.google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/webkit/WebSettings.java&q=getCurrentUserAgent&sa=N&cd=1&ct=rc&l=370

根據該文件,你不能讓一個WebSettings對象沒有一個確定的WebView。

您是否需要它與手機發送的完全一樣?如果沒有,只需選擇一個標準的Android用戶代理(不是版本/版本特定的)

+0

有什麼辦法找到「web_user_agent」資源字符串從Android的用於格式化輸出?我已經搜索並找不到它。 – 2011-06-24 18:18:09

+0

找到它: Mozilla/5.0(Linux; U; Android%s) AppleWebKit/525.10 +(KHTML,如Gecko)Version/3.0.4 Mobile Safari/523.12.2 2011-06-24 18:20:34

+0

不幸的是,該字符串有許多Android/WebKit版本的細節,使我們很難在我們的應用程序中構建一個等同於WebView的UserAgent,跨越多個Android版本。 – 2011-06-24 18:23:18

1

用戶代理的信息是從HTTP頭獲得的,這取決於用什麼瀏覽器來啓動WebView對象。因此,如果您只想在不創建WebView的情況下獲取用戶代理字符串,那就沒有任何意義。

更好的方法可能是創建一個WebView並將其可見性設置爲GONE。獲取用戶代理字符串後,將其銷燬。

0

源自android源代碼。

public static String getDefaultUserAgent() { 
    StringBuilder result = new StringBuilder(64); 
    result.append("Dalvik/"); 
    result.append(System.getProperty("java.vm.version")); // such as 1.1.0 
    result.append(" (Linux; U; Android "); 

    String version = Build.VERSION.RELEASE; // "1.0" or "3.4b5" 
    result.append(version.length() > 0 ? version : "1.0"); 

    // add the model for the release build 
    if ("REL".equals(Build.VERSION.CODENAME)) { 
     String model = Build.MODEL; 
     if (model.length() > 0) { 
      result.append("; "); 
      result.append(model); 
     } 
    } 
    String id = Build.ID; // "MASTER" or "M4-rc20" 
    if (id.length() > 0) { 
     result.append(" Build/"); 
     result.append(id); 
    } 
    result.append(")"); 
    return result.toString(); 
}