【问题标题】:How do detect Android Tablets in general. Useragent?一般如何检测 Android 平板电脑。用户代理?
【发布时间】:2011-03-17 15:56:38
【问题描述】:

我到处找。我们正在使用摩托罗拉 Zoom 来尝试我们的平板电脑站点测试。 问题是Android Useragent 是一个通用的Useragent,平板Android 和移动Android 没有区别。我不想只针对 Xoom Useragent 之类的特定设备,因为 Android 很可能在不久的将来会出现在多个平板设备上。

我们正在使用 Umbraco CMS,并且我们已经研究过使用 51Degrees.mobi 解决方案,但目前这无法满足我们的需求。也许在未来。我知道 51Degrees 和 Umbraco 的一些人将会对 Umbraco 进行一些整合,但最终的项目可能要几个月才能完成。
因此,我们为什么要检测 Android 平板电脑的 Useragent 字符串,而不是像现在这样直接访问我们的移动网站。

如果有人知道如何检测一般的 Android 平板电脑,则不是特定设备会很有帮助。

【问题讨论】:

  • 我只是猜测,但也许有一种方法可以查看观看分辨率有多高?
  • @Phonon,是的,我们正在尝试使用 Javascript 将 res 值发送回服务器。我们正在尝试向我们发送 __doPostBack ,但这似乎并没有返回我们的价值。我们有一个隐藏的输入值,它显示客户端,但我们没有将它返回服务器端。
  • 不确定我是否可以在这里为您提供帮助。

标签: android device-detection


【解决方案1】:

问题是Android User-Agent是通用的User-Agent,平板Android和手机Android没有区别。

这是不正确的。移动 Android 在 User-Agent 标头中有“Mobile”字符串。平板电脑 Android 没有。

值得一提,有不少平板电脑在 userAgent 中报告“Mobile”Safari,而后者并不是唯一/可靠的区分方式在手机和平​​板电脑之间。

【讨论】:

  • 你是对的。我只是在寻找一个包含 Android 的字符串。我必须搜索包含 Android 和 !mobile 的字符串。找到 Tim Bray 的文章。
  • @yoavf:XOOM 的 Android 3.1 更新似乎已经解决了这个问题。我拥有一台 XOOM,只是对其进行了测试——没有“移动设备”。
  • 这个答案并不完全正确。有不少平板电脑——甚至是最新的 Kindle Fire——在 userAgent 字符串中报告“Mobile”Safari。目前似乎还没有一种可靠的方法来检测平板电脑与手机,除非它结合了 userAgent 和对分辨率检测的可能支持。
  • 错误!三星 Galaxy Tab 显然是平板电脑,但它的用户代理中包含“移动”
  • 我相信“移动”添加是在 Android 4 上,还有很多设备在 4 之前...对于 android 2.x 我假设是手机,对于 3.x 我假设是平板电脑(虽然会有一些误报)...否则您可以测试移动设备...
【解决方案2】:

@卡洛斯: Tim Bray 在他的文章中推荐了这一点(另一位 post by Google 也是如此),但不幸的是,并非所有平板电脑制造商都在应用。

...我们建议大型设备制造商从用户代理中删除“Mobile”...

我见过的大多数 Android 平板电脑用户代理字符串都使用移动 safari,例如三星 Galaxy Tab:

Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

所以目前我正在检查设备名称以检测 Android 平板电脑。只要市场上只有几个模型,没关系,但很快这将是一个丑陋的解决方案。

至少在 XOOM 的情况下,移动部分似乎消失了:

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

但由于目前只有 Andorid 3.x 的平板电脑,检查 Android 3 就足够了。

【讨论】:

  • 您能否发布您检查的设备列表和编码。
【解决方案3】:

Mo’ better to also detect “mobile” user-agent

虽然您可能仍想在 User-Agent 中检测“android”以 实现特定于 Android 的功能,例如触摸屏 优化,我们的主要信息是:您的移动网站是否应该依赖于 UA 嗅探,请检测字符串“mobile”和“android”,而不是 不仅仅是用户代理中的“android”。这有助于正确地为两者提供服务 您的手机和平板电脑访问者。

通过浏览器检测 Android 设备

 < script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>----------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>----------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>

【讨论】:

  • 这非常有效。我为 iPad 和 iPhone/iPod 添加了这个。 else if (userAgent.search("ipad") &gt; -1) document.write("&lt;b&gt; iPad &lt;br&gt;") else if ((userAgent.search("iphone") &gt; -1)||(userAgent.search("ipod") &gt; -1)) document.write("&lt;b&gt; iPhone or iPod &lt;br&gt;")
  • 它如何在 mozilla/5.0 (linux; u; android 2.2; en-gb; gt-p1000 build/froyo) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/ 上工作533.1 里面有三星 Galaxy 平板电脑的“移动”这个词?
【解决方案4】:

您可以试试这个脚本,因为您不想只针对 Xoom。我没有 Xoom,但应该可以。

function mobile_detect(mobile,tablet,mobile_redirect,tablet_redirect,debug) {
var ismobile = (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase()));
var istablet = (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()));

if (debug == true) {
    alert(navigator.userAgent);
}

if (ismobile && mobile==true) {
    if (debug == true) {
        alert("Mobile Browser");
    }
    window.location = mobile_redirect;
} else if (istablet && tablet==true) {
    if (debug == true) {
        alert("Tablet Browser");
    }
    window.location = tablet_redirect;
}
}

我在 github 上创建了一个项目。看看 - https://github.com/codefuze/js-mobile-tablet-redirect。如果有任何问题,请随时提交问题!

【讨论】:

  • 这不适用于 Android 版本 > 3.0,例如 ICS (4.0)。我认为接受的答案是正确的 - 检查“Mobile Safari”是否在用户代理中。
  • 不确定其他 Kindle,但 Kindle Fire 1 在其用户代理字符串中没有“kindle” - 也不包含“android”;唯一的线索是“丝绸”和“丝绸加速”这两个词。
【解决方案5】:

一旦我在用户代理中检测到 Android,这就是我区分平板电脑和智能手机浏览器的方式(这是使用 Python,但对于其他编程语言同样简单):

if ("Android" in agent):
  if ("Mobile" in agent):
    deviceType = "Phone"
  else:
    deviceType = "Tablet"

更新:根据下面的 cmets 反映在 Android 上使用 Chrome。

【讨论】:

  • 为什么不在代理中寻找“Mobile”?
  • 我认为这也可以,但我认为仅搜索“Mobile”可能很危险 - 可能有设备名称,例如“HTC Mobile”等。我认为这是推荐的方法。
  • 现在 Google 发布了适用于 Android 的 Chrome,您的方法可能会遇到一些问题。因为,Android 上的 Chrome 会将自己报告为“Chrome Mobile”,而不是像普通的 Android 浏览器那样将自己报告为“Mobile Safari”。部分官方推荐:developers.google.com/chrome/mobile/docs/user-agent
【解决方案6】:

基于此站点上的代理字符串:

http://www.webapps-online.com/online-tools/user-agent-strings

这个结果出现了:
第一:

所有平板设备都有:
1. 平板电脑
2. iPad

第二个:

所有电话设备都有:
1. 手机
2. 电话

第三:

平板电脑和手机设备具有:
1.安卓

如果您可以逐级检测,我认为结果是 90% 正确。像 SharePoint 设备频道。

【讨论】:

    【解决方案7】:

    这是我使用的:

    public static boolean onTablet()
        {
        int intScreenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
    
        return (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE) // LARGE
        || (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE + 1); // Configuration.SCREENLAYOUT_SIZE_XLARGE
        }
    

    【讨论】:

      【解决方案8】:

      虽然我们不能说某些平板电脑是否省略了“移动设备”,但包括三星 Galaxy Tab 在内的许多平板电脑确实在其用户代理中拥有移动设备,因此无法在 android 平板电脑和 android 设备之间进行检测电话,而无需检查型号细节。恕我直言,这是浪费时间,除非您计划每月更新和扩展您的设备列表。

      不幸的是,最好的解决方案是向 Google 投诉此问题并让他们修复 Chrome for Android,以便添加一些文本来识别移动设备和平板电脑。地狱,即使在字符串中的特定位置有一个字母 M OR T 就足够了,但我想这太有意义了。

      【讨论】:

        【解决方案9】:

        Xoom 在用户代理中有 Xoom 这个词:Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/ 534.13

        Galaxy Tab 在用户代理中有“Mobile”:Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

        因此,检测 Xoom 很容易,很难检测特定的 Android 版本是否为移动设备。

        【讨论】:

          【解决方案10】:

          大多数现代平板电脑都运行 honeycomb aka 3.x 默认情况下,没有手机运行 3.x。 当前运行 2.x 的大多数平板电脑的容量较小,并且无论如何在提供移动站点时可能会更好。 我 知道 这 不是 完美 的 .. 但 我 想 这 比 没有 手机 准确得多 ..

          【讨论】:

          • 实际上手机甚至无法运行 3.x,因为它是 Android 的仅平板电脑版本并且不是开源的。
          【解决方案11】:

          虽然 Mobile Android 的用户代理字符串中可能包含“mobile”,但如果它在平板电脑上使用 Opera Mobile for Android 会怎样?它的用户代理字符串中仍会包含“mobile”,但应该显示平板电脑大小的网站。 您需要测试前面没有“opera”的“mobile”,而不仅仅是“mobile”

          或者您可以忘记 Opera Mobile。

          【讨论】:

          • Opera mobile 在用户字符串中不使用“mobile”,而是使用“mobi”。见here
          • Opera Mobile 手机版的用户代理字符串中包含“Opera Mobi”,而平板电脑版 Opera Mobile 的用户代理字符串中包含“Opera Tablet”。
          【解决方案12】:

          我建议使用Categorizr 来检测用户是否在平板电脑上。可以查看categorizr测试结果here

          【讨论】:

            【解决方案13】:

            如果您使用“Mobile”的缺失,那么它几乎是正确的。 但也有HTC Sensation 4G(4.3寸安卓2.X)不发送Mobile关键字。

            您可能要单独对待它的原因是由于iframes等。

            【讨论】:

              【解决方案14】:

              51Degrees 测试版、1.0.1.6 和最新的稳定版本 1.0.2.2(2011 年 4 月 28 日)现在可以嗅探平板电脑。基本上是这样的:

              string capability = Request.Browser["is_tablet"];
              

              希望对你有所帮助。

              【讨论】:

                【解决方案15】:

                试试OpenDDR,与提到的大多数其他解决方案不同,它是免费的。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-03-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多