106

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

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

如果有人知道如何检测和一般的 Android 平板电脑,那么特定设备将非常有帮助。

4

15 回答 15

114

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

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

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

于 2011-03-17T19:48:18.033 回答
20

@Carlos:Tim Bray 在他的文章中推荐了这一点(谷歌的另一篇文章也是如此),但不幸的是,并非所有平板电脑制造商都在应用它。

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

我见过的大多数 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) 版本/4.0 Safari/534.13

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

于 2011-04-08T15:03:34.193 回答
12

Mo'更好地检测“移动”用户代理

虽然您可能仍希望在 User-Agent 中检测“android”以实现 Android 特定的功能,例如触摸屏优化,但我们的主要信息是:如果您的移动网站依赖于 UA 嗅探,请检测字符串“mobile”和用户代理中的“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>
于 2011-10-14T05:06:40.170 回答
8

你可以试试这个脚本,因为你不想只针对 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。如果有任何问题,请随时提交问题!

于 2011-12-31T04:34:22.343 回答
6

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

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

更新:根据以下评论反映在 Android 上使用 Chrome。

于 2012-03-29T15:51:30.553 回答
5

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

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

这个结果出现了:
首先:

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

第二:

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

第三:

平板电脑和手机设备有:
1. Android

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

于 2015-09-23T09:18:44.010 回答
2

这是我使用的:

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
    }
于 2012-04-11T14:54:54.027 回答
2

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

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

于 2012-07-27T15:51:05.010 回答
1

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

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

于 2011-07-11T18:40:01.017 回答
1

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 版本是否是移动设备。

于 2011-07-26T00:03:55.237 回答
1

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

于 2011-09-25T19:39:48.633 回答
1

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

或者你可以忘记 Opera Mobile。

于 2011-12-15T12:30:50.583 回答
1

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

于 2012-03-01T00:43:50.117 回答
0

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

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

希望这对您有所帮助。

于 2011-04-29T03:33:10.283 回答
0

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

于 2017-02-19T16:58:17.313 回答