Cómo detectar tabletas Android en general. Useragent?


He buscado por todas partes. Estamos usando un Motorola Zoom para probar nuestras pruebas en el sitio de la tableta. El problema es que el Agente de usuario de Android es un agente de usuario general y no hay diferencia entre la tableta Android y Android móvil. No quiero solo apuntar a un dispositivo específico como el Useragent Xoom ya que Android lo más probable es que esté en varios dispositivos de tableta en un futuro próximo.

Estamos usando Umbraco CMS, y hemos mirado el uso de la 51Degrees.mobi solución, y en este momento este no funcionará para nuestras necesidades. Tal vez en el futuro. Sé que 51Degrees y algunas de las personas en Umbraco van a estar haciendo alguna integración en Umbraco, pero el proyecto final probablemente no estará fuera por un par de meses.
Por lo tanto, por qué nos gustaría detectar la cadena de agente de usuario de una tableta Android y que no sea directa a nuestro sitio móvil como lo es actualmente.

Si alguien sabe cómo detectar y Android Tablet en general, no el dispositivo específico sería muy útil.

Author: Bill the Lizard, 2011-03-17

15 answers

El problema es que el Agente de Usuario de Android es un Agente de Usuario general y no hay diferencia entre Android tableta y Android móvil.

Esto es incorrecto. Móvil Android tiene la cadena "Móvil" en el encabezado del Agente de usuario. Tablet Android no lo hace.

 105
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-04 20:19:27

@Carlos: En su artículo Tim Bray recomienda esto (al igual que otro post de Google), pero desafortunadamente no está siendo aplicado por todos los fabricantes de tabletas.

... Recomendamos que los fabricantes de dispositivos de factor de forma grande eliminen "Móvil" del Agente de Usuario...

La mayoría de las cadenas de agentes de usuario de tabletas Android que he visto usan safari móvil, por ejemplo, el Samsung Galaxy Tab:

Mozilla / 5.0 (Linux; U; Android 2.2; es-us; SCH-I800 Build / FROYO) AppleWebKit/533.1 (KHTML, como Gecko) Versión / 4.0 Mobile Safari / 533.1

Así que en este momento estoy comprobando los nombres de los dispositivos para detectar tabletas Android. Mientras haya solo unos pocos modelos en el mercado, eso está bien, pero pronto esta será una solución fea.

Al menos en el caso del XOOM, la parte móvil parece haberse ido:

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

Pero como actualmente solo hay comprimidos con Andorid 3.x, comprobar en Android 3 sería suficiente.

 20
Author: Bitwalker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-08 15:03:34

Mo 'mejor también detectar" móvil " agente de usuario

Mientras que es posible que todavía desee detectar "android" en el Agente de usuario para implementar características específicas de Android, como la pantalla táctil optimizaciones, nuestro mensaje principal es: Si su sitio móvil depende de UA sniffing, por favor detectar las cadenas "móvil" y "android", en lugar que solo "androide", en el Agente de Usuario. Esto ayuda a servir adecuadamente a ambos sus visitantes móviles y tabletas.

Detección Dispositivo Android a través del navegador

 < 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>
 12
Author: Jorgesys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-09 17:29:52

Puede probar este script ya que no desea apuntar solo al Xoom. No tengo un Xoom, pero debería funcionar.

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;
}
}

He creado un proyecto en github. Échale un vistazo - https://github.com/codefuze/js-mobile-tablet-redirect . Siéntase libre de enviar problemas si hay algo mal!

 8
Author: CodeFuze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-31 04:34:22

Una vez que he detectado Android en el agente de usuario, así es como diferencio entre los navegadores de tabletas y teléfonos inteligentes (esto está usando Python, pero es similarmente simple para otros lenguajes de programación):

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

ACTUALIZADO: para reflejar el uso de Chrome en Android, según los comentarios a continuación.

 6
Author: Suman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-02 14:30:57

Basado en cadenas de agentes en este sitio:

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

Estos resultados surgieron:
Primero:

Todos los dispositivos Tablet tienen:
1. Comprimido
2. iPad

Segundo:

Todos los Dispositivos Telefónicos tienen:
1. Móvil
2. Teléfono

Tercero:

Los dispositivos de tableta y teléfono tienen:
1. Android

Si se puede detectar nivel por nivel, lo que el resultado es 90 por ciento cierto. Como el dispositivo SharePoint Canal.

 3
Author: Jalali Shakib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-23 09:18:44

Esto es lo que uso:

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
Author: Regis St-Gelais,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-11 15:01:08

Si bien no podemos decir si algunas tabletas omiten "móvil", muchos incluyendo el Samsung Galaxy Tab hacen tienen móvil en su agente de usuario, por lo que es imposible detectar entre una tableta Android y un teléfono android sin recurrir a la comprobación de los detalles del modelo. Esta IMHO es una pérdida de tiempo a menos que planee actualizar y expandir su lista de dispositivos mensualmente.

Desafortunadamente la mejor solución aquí es quejarse a Google sobre esto y conseguir que arreglen Chrome para Android así agrega algo de texto para identificar entre un dispositivo móvil y una tableta. Infierno incluso una sola letra M O T en un lugar específico en la cadena sería suficiente, pero supongo que eso tiene demasiado sentido.

 2
Author: D Langhorne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-11 06:25:42

Xoom tiene la palabra Xoom en el agente de usuario: Mozilla / 5.0 (Linux; U; Android 3.0.1; es-us; Xoom Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

Galaxy Tab tiene "Móvil" en el agente de usuario: 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

Por lo tanto, es fácil detectar el Xoom, difícil de detectar si una versión específica de Android es móvil o no.

 1
Author: travyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-26 00:03:55

La mayoría de las tabletas modernas funcionan con honeycomb aka 3.x Ningún teléfono funciona 3.x por defecto. La mayoría de las tabletas que se ejecutan actualmente 2.x tiene menos capacidad y podría ser mejor cuando se presenta con un sitio móvil de todos modos. Sé que no es impecable.. pero supongo que 's mucho más precisa que la ausencia de móvil..

 1
Author: gjr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-25 19:39:48

Mientras que Android móvil puede tener "móvil" en su cadena de agente de usuario, ¿qué pasa si está utilizando Opera Mobile para Android en una tableta? Todavía tendrá "móvil" en su cadena de agente de usuario, pero debería mostrar sitios del tamaño de una tableta. Tendrá que probar para "móvil "que no está precedido por" opera "en lugar de solo"móvil"

O simplemente podrías olvidarte de Opera Mobile.

 1
Author: GeeItSomeLaldy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-15 12:30:50

Recomendaría usar Categorizr para detectar si el usuario está en una tableta. Puede ver los resultados de la prueba categorizr aquí.

 1
Author: hybrid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-01 00:43:50

Si usas la ausencia de "Móvil" entonces es casi correcto. Pero hay HTC Sensation 4G (4.3 pulgadas con Android 2.X) que no envía palabra clave móvil.

La razón por la que puede querer tratarlo por separado se debe a iframes, etc.

 1
Author: zel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-17 10:32:32

El 51Degrees beta, 1.0.1.6 y la última versión estable 1.0.2.2 (4/28/2011) ahora tienen la capacidad de olfatear para la tableta. Básicamente a lo largo de las líneas de:

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

Espero que esto te ayude.

 0
Author: Joey Schluchter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-22 01:39:05

Try OpenDDR, es gratis a diferencia de la mayoría de las otras soluciones mencionadas.

 0
Author: Werner Keil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-19 16:58:17