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

我到处看着。 我们正在使用摩托罗拉Zoom来试用我们的平板电脑现场testing。 问题是Android的Useragent是一个普通的Useragent,平板电脑Android和移动Android没有区别。 我不想只针对Xoom Useragent这样的特定设备,因为在不久的将来,Android很可能会在多个平板设备上。

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

如果有人知道如何检测和Android平板电脑一般,而不是具体的设备会很有帮助。

问题是Android用户代理是一个普通的用户代理,平板Android和移动Android没有区别。

这是不正确的。 移动Android在用户代理标题中有“移动”string。 平板电脑Android不。

@卡洛斯:在他的文章中,蒂姆·布雷(Tim Bray)推荐这个(就像谷歌的另一篇文章 ),但遗憾的是并没有被所有的平板电脑制造商所应用。

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

我见过的大多数Android平板电脑用户代理string都使用移动Safari,例如Samsung Galaxy Tab:

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

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

至less在XOOM的情况下,移动部分似乎已经消失:

Mozilla / 5.0(Linux; U; Android 3.0; zh-cn; Xoom Build / HRI39)AppleWebKit / 534.13(KHTML,如Gecko)版本4.0 Safari / 534.13

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

莫最好也检测“移动”用户代理

虽然您可能仍然希望在用户代理中检测“android”,以实现特定于Android的function(如触摸屏优化),但我们的主要信息是:如果您的移动网站依赖于UA嗅探,请检测string“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> 

你可以试试这个脚本,因为你不想只定位到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上创build了一个项目。 检查出来 – https://github.com/codefuze/js-mobile-tablet-redirect 。 如果有任何问题,请随时提交问题!

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

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

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

基于本网站上的代理string:

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

结果出来了:
第一:

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

第二:

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

第三:

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

如果你能逐级检测,结果是90%。 像SharePoint设备频道一样。

这是我使用的:

 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 } 

虽然我们不能说有些平板电脑省略了“手机”,但是包括三星Galaxy Tab在内的许多平板电脑在他们的用户代理中都有移动设备,因此无法通过检查模型细节来检测Android平板电脑和Android手机之间的差异。 恕我直言,这是浪费时间,除非你计划每月更新和扩大你的设备列表。

不幸的是,这里的最佳解决scheme就是向Google抱怨,并让他们修复Android版Chrome,以便在移动设备和平板电脑之间添加一些文字。 甚至在string的特定位置插入单个字母M OR T就足够了,但是我想这太有道理了。

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

大多数现代平板电脑运行蜂窝又名3.x没有电话默认运行3.x。 目前运行2.x的大多数平板电脑都具有较低的容量,而且无论如何都可以使用移动网站。 我知道这不是完美的,但我想这比移动的缺乏更准确。

虽然移动的Android可能有“移动”的用户代理string,如果它在平板电脑上使用Android的Opera Mobile? 它的用户代理string中仍然会显示“mobile”,但应显示Tablet大小的网站。 您需要testing“手机”之前没有“歌剧”,而不是“手机”

或者你可以忘记Opera Mobile。

我build议使用分类器来检测用户是否在平板电脑上。 您可以在这里查看分类器testing结果。

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

你可能想分开处理它的原因是由于iframes等。

51Degreestesting版,1.0.1.6和最新的稳定版本1.0.2.2(2011年4月28日)现在有能力嗅探平板电脑。 基本上是:

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

希望这可以帮助你。

尝试OpenDDR ,它是不同于大多数其他解决scheme。