如何知道特定Android设备的用户代理字符串?

时间:2012-12-25 16:04:03

标签: android browser

任务是获取Web服务器端某些设备的统计信息。为此,我想知道特定Android设备上默认浏览器的用户代理字符串,例如:


  • HTC:
    • HTC Jetstream
    • HTC Flyer
    • HTC Evo View 4G

  • NEXUS:
    • Nexus 7
    • Nexus 10

  • SAMSUNG:
    • Galaxy Tab
    • Galaxy Tab 2
    • Galaxy Note

  • MOTOROLA:
    • 摩托罗拉Xyboard 8“
    • Droid Xyboard
    • 摩托罗拉Xyboard 10“

有没有简单的方法来了解它?是否有一个众所周知的列表,将设备名称映射到用户代理字符串?另外,如果我采取不同的方法 - 请提供建议。

6 个答案:

答案 0 :(得分:5)

在我看来,要根据Android设备计算各种用户代理的命中率,您应该将一个 URL 指向服务器。在应用程序启动时获取用户代理并发送到您的服务器。

我运行此代码以获取用户代理

        WebView mes = new WebView(this);
        String str = mes.getSettings().getUserAgentString();
        Log.i("My User Agent", str);

在三星平板电脑10.1英寸模拟器上我有用户代理

Mozilla/5.0 (Linux; U; Android 3.0; en-us; sdk Build/HONEYCOMB) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

在Nexus模拟器上我得到了

Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; google_sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

答案 1 :(得分:4)

虽然这不是一个直接的答案,但我想提出这个问题:

请注意,客户端的用户代理可以轻松修改。 例如,在编程方面:

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUserAgent(params, "WAHAHAHA");
HttpConnectionParams.setConnectionTimeout(params, HTTP_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, HTTP_READ_TIMEOUT);
HttpClient newHttpClient = new DefaultHttpClient(params);

使用此HttpClient访问您的网站时,用户代理将是" WAHAHAHA"

此外,市场上的一些网络浏览器(例如dolphin浏览器)允许用户输入他们想要的任何用户代理组合。

因此,我认为从用户代理收集的命中计数统计数据将不那么可靠,我建议找另一个标准来收集命中数信息=]

答案 2 :(得分:3)

您可以找到用户代理here

的列表

并在服务器上查看它们

答案 3 :(得分:3)

我建议您修改用perl编写的Apache Mobile Filter等现有解决方案。它使用51Degrees XML文件和大约70k用户代理。您只需要找到有趣的并修改AMF脚本,以便收集有趣的数据。更重要的是51Degrees和AMF也可用于识别用户的设备是否是移动的,它的屏幕尺寸等。

答案 4 :(得分:2)

结帐UserAgentString.com。它还有一个Android Webkit Browser User Agent Strings列表。

他们还have an API来解析UA字符串并返回一个键值对或JSON列表。

答案 5 :(得分:1)

创建Webview并使用http://developer.android.com/reference/android/webkit/WebSettings.html#getDefaultUserAgent%28android.content.Context%29,没有列表将设备名称映射到用户代理,我建议通过运行您的应用程序的移动设备向服务器发送设备类型和用户代理。