Android通用用户代理(UA)

Sag*_*kar 11 generics android agent

我正在构建一个Android应用程序来显示来自服务器的内容Feed.该服务器是一个移动网站(如http://m.google.com),可跟踪各种移动客户端的流量.要区分Android客户端,如何为我的应用提供通用字符串?

这就是我问的原因:

我得到的一些Android设备有UA字符串,如:

Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; ADR6400L 4G Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/520.17

Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/520.17 Android_MyFirstApp

Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; ADR6400L 4G Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/520.17

我需要在UserAgent字符串后附一个字符串来标识我的应用程序.例如:

我需要做这样的事情: Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/520.17 Android_MyFirstApp.

这是正确的方法吗?

Mic*_*eld 12

要更改用户代理,您需要使用HTTP请求发送自定义User-Agent:标头.假设您正在使用Android org.apache.http.client.HttpClient类,您有两个选择:

  1. 在每个请求上设置用户代理标头.您可以在创建HttpRequest(HttpPost,HttpGet,无论)对象后调用setHeader()来执行此操作:
HttpGet get = new HttpGet(url);
get.setHeader("User-Agent", myUserAgent);
  1. 更改默认的User Agent参数,该参数将影响该HttpClient类的所有未来实例.您可以通过使用getParams()从客户端读取HttpParams集合,然后使用setParameter()更新用户代理来完成此操作:
DefaultHttpClient http = new DefaultHttpClient(); 
http.getParams().setParameter(CoreProtocolPNames.USER_AGENT, myUserAgent);

如果要追加而不是替换用户代理,可以先读取现有代理,更改它,然后使用上述任一方法将其设置回来.

编辑:

由于您说您正在使用WebView视图,因此您需要在那里使用WebSettings自定义点.这基本上是相同的过程.在调用load()方法(loadUrl,loadData等)之前,您需要设置用户代理.只要WebView的实例存在,更改的用户代理就会一直存在,因此您可以在Activity的onCreate()中执行此操作:

view = (WebView)findViewById(R.id.webview);
view.getSettings().setUserAgentString(myUserAgent);

同样,如果要追加而不是替换,请使用getUserAgentString()来读取它,然后更新它并再次将其重新设置.