如何检测Android平板电脑一般。用户代理?

时间:2011-03-17 15:56:39

标签: android device-detection

我到处寻找。我们正在使用Motorola Zoom来尝试我们的平板电脑网站测试。 问题是Android Useragent是一般的Useragent,平板电脑Android和移动Android之间没有区别。我不想只针对像Xoom Useragent这样的特定设备,因为Android很可能会在不久的将来出现在多个平板设备上。

我们正在使用Umbraco CMS,我们已经考虑使用51Degrees.mobi解决方案,目前这不适合我们的需求。或许在将来。我知道51Degrees和Umbraco的一些人将要进行一些整合到Umbraco,但最终的项目可能不会在几个月内出现。
因此,为什么我们要检测Android平板电脑的Useragent字符串,并且不要像现在这样直接访问我们的移动网站。

如果有人知道如何检测Android平板电脑,那么特定设备不会非常有用。

15 个答案:

答案 0 :(得分:109)

  

问题是Android用户代理是一般用户代理,平板电脑Android和移动Android之间没有区别。

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

答案 1 :(得分:20)

@Carlos: 在他的文章中,Tim Bray建议这样做(和另一个post by Google一样),但遗憾的是并没有被所有平板电脑制造商应用。

  

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

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

  

Mozilla / 5.0(Linux; U; Android 2.2; zh-CN; SCH-I800 Build / FROYO)AppleWebKit / 533.1(KHTML,类似Gecko)版本/ 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,类似Gecko)版本/ 4.0 Safari / 534.13

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

答案 2 :(得分:12)

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

  

虽然您可能仍想在User-Agent中检测到“android”   实现Android特有的功能,如触摸屏   优化,我们的主要信息是:您的移动网站应该依赖   UA嗅探,请检测字符串“mobile”和“android”   在User-Agent中不仅仅是“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>

答案 3 :(得分: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。如果有任何问题,请随时提交问题!

答案 4 :(得分:6)

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

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

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

答案 5 :(得分:3)

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

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

结果出现了:
第一:

  

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

第二:

  

所有电话设备都有:
  1.移动
  2.电话

第三:

  

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

如果您可以逐级检测,我认为结果是90%为真。与SharePoint设备频道类似。

答案 6 :(得分: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
    }

答案 7 :(得分:2)

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

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

答案 8 :(得分:1)

如果你使用“移动”的缺席,那么它几乎是正确的。 但是有HTC Sensation 4G(4.3英寸与Android 2.X)不发送Mobile关键字。

您可能希望单独处理它的原因是iframes等。

答案 9 :(得分:1)

Xoom在用户代理中有单词Xoom:Mozilla / 5.0(Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66)AppleWebKit / 534.13(KHTML,类似Gecko)版本/ 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,与Gecko一样)Version / 4.0 Mobile Safari浏览器/ 533.1

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

答案 10 :(得分:1)

大多数现代平板电脑都运行蜂窝,即3.x 没有手机默认运行3.x. 目前运行2.x的大多数平板电脑都具有较少的容量,并且无论如何都可能更适合移动网站。 我知道它并不完美......但我想它比没有移动设备准确得多......

答案 11 :(得分:1)

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

或者你可以忘掉Opera Mobile。

答案 12 :(得分:1)

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

答案 13 :(得分:0)

51Degrees测试版,1.0.1.6和最新稳定版1.0.2.2(2011年4月28日)现在能够嗅到平板电脑。基本上是:

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

希望这会对你有所帮助。

答案 14 :(得分:0)

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