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


103

我到处都看过。我们正在使用Motorola Zoom尝试我们的平板电脑现场测试。问题在于,Android Useragent是常规Useragent,平板电脑Android和移动Android之间没有区别。我不想只针对特定的设备,例如Xoom Useragent,因为Android在不久的将来很可能会在多台平板电脑上使用。

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

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


2
我只是在猜测,但是也许有一种方法可以查看观看分辨率也有多高?
Phonon

@Phonon,是的,我们正在尝试使用Javascript将res值发送回服务器。我们正在尝试为我们提供__doPostBack,但这似乎并没有将我们的价值送回。我们有一个隐藏的输入值,它显示了客户端,但没有将其返回服务器端。
ClosDesign 2011年

不知道我能否在这里为您提供帮助。
声子

Answers:


112

问题在于,Android User-Agent是常规的User-Agent,平板Android和移动Android之间没有区别。

这是不正确的。移动Android在用户代理标头中具有“移动”字符串。平板电脑Android没有。

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


3
你是对的。我只是在寻找包含Android的字符串。我必须搜索包含Android和!mobile的字符串。找到了蒂姆·布雷关于此的文章。
ClosDesign 2011年

6
@yoavf:XOOM的Android 3.1更新似乎已修复了该问题。我拥有一个XOOM并刚刚对其进行了测试-没有“移动”设备。
CommonsWare,

27
这个答案并不完全正确。有很多平板电脑-甚至是最新的Kindle Fire-都在userAgent字符串中报告了“ Mobile” Safari。除非结合了userAgent和对分辨率检测的可能支持,否则目前似乎还没有可靠的方法来检测平板电脑和手机。
vernonk 2011年

22
假!三星银河标签是显而易见的平板电脑,但其用户代理中具有“移动设备”
puchu 2012年

1
我相信“移动”功能是在Android 4上推出的,但仍然有很多4之前的设备...对于android 2.x,我认为是手机,对于3.x,我认为是平板电脑(尽管会有一些误报) ...否则您可以测试手机...
Tracker1 2013年

20

@Carlos:Tim Bray在他的文章中建议使用此方法(Google的另一篇文章也建议这样做),但不幸的是,并非所有平板电脑制造商都采用此方法。

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

我见过的大多数Android平板电脑用户代理字符串都使用移动浏览器,例如Samsung 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; zh-CN; Xoom Build / HRI39)AppleWebKit / 534.13(KHTML,like Gecko)Version / 4.0 Safari / 534.13

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


1
您能否发布您检查过的设备列表和编码。
LTech

12

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

虽然您可能仍想在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
这很完美。我在iPad和iPhone / iPod上添加了此功能。 else if (userAgent.search("ipad") > -1) document.write("<b> iPad <br>") else if ((userAgent.search("iphone") > -1)||(userAgent.search("ipod") > -1)) document.write("<b> iPhone or iPod <br>")
Spencer Cole

在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 Tablet中吗?
LTech

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。如果有任何问题,请随时提交问题!


1
这不适用于大于3.0的Android版本,例如ICS(4.0)。我认为已接受的答案是正确的答案-检查用户代理中是否包含“ Mobile Safari”。
苏曼(Suman)2012年

不确定其他Kindle,但Kindle Fire 1的用户代理字符串中没有“ kindle”-也不包含“ android”;唯一的线索是“丝绸”和“丝绸加速”。
mklement0 2012年

6

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

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

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


为什么不只在代理中寻找“移动”?
Eren Tantekin

我认为这也可能会起作用,但是我认为仅搜索“移动”可能会很危险-可能会有带有名称的设备,例如“ HTC Mobile”,等等。我认为这是推荐的方法。
苏曼(Suman)2012年

1
既然Google发布了Android版Chrome,那么您的方法可能会出现一些问题。因为,Android上的Chrome会报告自己为“ Chrome移动版”,而不是常规的Android浏览器正在使用的“移动Safari”。有关官方的建议,请访问:developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin,2012年

4

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

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

结果出来了:
首先:

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

第二:

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

第三:

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

如果您可以逐级检测,我的结果是90%正确。就像SharePoint设备通道一样。


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
    }

2

尽管我们无法确定某些平板电脑是否省略了“移动设备”,但包括Samsung Galaxy Tab在内的许多平板电脑的用户代理中确实都装有移动设备,这使得在不诉诸模型细节的情况下无法在android平板电脑和android手机之间进行检测。除非您计划每月更新和扩展设备列表,否则此IMHO会浪费时间。

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


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; zh-CN; SCH-I800 Build / FROYO)AppleWebKit / 533.1(KHTML,如Gecko)版本/4.0 Mobile Safari / 533.1

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


1

大多数现代平板电脑都运行蜂窝又名3.x,默认情况下没有手机运行3.x。当前运行2.x的大多数平板电脑的容量较小,无论如何与移动网站一起显示时,它们的性能可能更好。我知道它不是完美的..但是我想它比没有移动设备要准确得多。


1
实际上,手机甚至无法运行3.x,因为它是仅限平板电脑的Android版本,并且不是开源的。
Eren Tantekin

1

尽管Android移动设备的用户代理字符串中可能包含“ mobile”,但是如果它在平板电脑上使用Android版Opera Mobile会怎样?它的用户代理字符串中仍将包含“ mobile”,但应显示Tablet大小的网站。您需要测试不带“ opera”而不是“ mobile”的“ mobile”

否则您可能会忘记Opera Mobile。


1
Opera mobile在用户字符串中不使用“ mobile”,而是使用“ mobi”。看到这里
伊恩·斯坦威

2
用于手机的Opera Mobile在用户代理字符串中具有“ Opera Mobi”,但是用于平板电脑的Opera Mobile在用户代理字符串中具有“ Opera Tablet”。
tagawa 2012年


1

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

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


0

51Degrees beta 1.0.1.6和最新的稳定版本1.0.2.2(2011年4月28日)现在具有嗅探平板电脑的功能。基本上遵循以下原则:

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

希望对您有帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.