如何知道特定的Android设备的用户代理string?

这个任务是在networking服务器端获得一些设备的统计数据。 为此,我想知道特定Android设备上默认浏览器的用户代理string,例如:


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

  • 关系:
    • Nexus 7
    • Nexus 10

  • 三星:
    • Galaxy Tab
    • Galaxy Tab 2
    • Galaxy Note

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

有一个简单的方法来了解它吗? 有没有一个众所周知的列表,将设备名称映射到用户代理string? 另外,如果我应该采取不同的方法 – 请咨询。

我build议你修改一个现有的解决scheme,比如用perl写的Apache Mobile Filter 。 它使用51Degrees XML文件与约70k用户代理。 您只需要find有趣的数据,然后修改AMF脚本,以便收集有趣的数据。 更多51Degrees和AMF也可以用来识别用户的设备是否是移动的,它是屏幕尺寸等。

在我看来,从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 

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

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

 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”

另外,市面上的一些网页浏览器如海豚浏览器允许用户input他们想要的任何用户代理组合。

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

你可以在这里find用户代理的列表

并在服务器上检查它们

签出UserAgentString.com 。 它还有一个Android Webkit浏览器用户代理string列表。

他们也有一个API来parsingUAstring,并返回一个键值对或JSON列表。

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