首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式检索User-Agent

以编程方式检索User-Agent
EN

Stack Overflow用户
提问于 2010-09-02 18:09:35
回答 6查看 41.3K关注 0票数 42

有没有一种方法可以在不使用WebView的情况下检索浏览器的用户代理?

我知道可以通过WebView获得它

代码语言:javascript
复制
WebView view = (WebView) findViewById(R.id.someview);
String ua = view.getSettings().getUserAgentString() ;

但是在我的例子中,我没有/不需要一个webview对象,我也不想仅仅为了检索用户代理字符串而创建它。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-02 18:21:48

如果你没有 one,你可以试着这样做

代码语言:javascript
复制
String ua=new WebView(this).getSettings().getUserAgentString();

编辑-

getUserAgentString()的医生说

返回WebView的用户代理字符串

所以我不认为你可以得到它,除非你声明一个。如果我错了,有人会纠正我

票数 61
EN

Stack Overflow用户

发布于 2012-09-07 16:13:50

如果你使用的是Android 2.1或更高版本,有一个简单得多的方法。当然,这与webview返回的User Agent字符串并不完全相同,但可能足以满足您的需求。

作为从web视图中提取的另一个优势,您可以在任何线程(不仅仅是UI线程)中使用它。

有一个名为http.agent的系统属性,可用于检索用户代理字符串。

代码语言:javascript
复制
String userAgent = System.getProperty("http.agent");

有关更多详细信息,请参阅Programmatically get User-Agent String

票数 59
EN

Stack Overflow用户

发布于 2011-03-10 22:56:09

我曾经使用过DeRagan提出的solution。但事实证明,创建单个WebView实例会启动一个线程"WebViewCoreThread“,该线程会一直在后台运行,直到系统终止应用程序为止。也许它不会消耗太多资源,但无论如何我都不喜欢它。因此,我现在使用的方法略有不同,它试图避免创建WebViewCoreThread:

代码语言:javascript
复制
// You may uncomment next line if using Android Annotations library, otherwise just be sure to run it in on the UI thread
// @UiThread 
public static String getDefaultUserAgentString(Context context) {
  if (Build.VERSION.SDK_INT >= 17) {
    return NewApiWrapper.getDefaultUserAgent(context);
  }

  try {
    Constructor<WebSettings> constructor = WebSettings.class.getDeclaredConstructor(Context.class, WebView.class);
    constructor.setAccessible(true);
    try {
      WebSettings settings = constructor.newInstance(context, null);
      return settings.getUserAgentString();
    } finally {
      constructor.setAccessible(false);
    }
  } catch (Exception e) {
    return new WebView(context).getSettings().getUserAgentString();
  }
}

@TargetApi(17)
static class NewApiWrapper {
  static String getDefaultUserAgent(Context context) {
    return WebSettings.getDefaultUserAgent(context);
  }
}

它直接使用包可见的构造函数创建WebSettings实例,如果由于某种原因(例如,由于未来安卓版本中的API更改)而不可用,则会默默地退回到“类似WebView”的解决方案。

更新

正如@Skywalker5446所指出的,从Android4.2/API17开始,有一个公共的静态方法来获取默认的用户代理值。我已经更新了我的代码,以便在支持的平台上使用该方法。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3626071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档