¿Cómo detectar las tabletas Android en general. ¿Agente de usuario?

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 Android Useragent es un Useragent general y no hay diferencia entre tablet Android y Android móvil. No quiero sólo apuntar a un dispositivo específico como el Xoom Useragent ya que Android probablemente estará en varios dispositivos de tableta en un futuro próximo.

Estamos usando Umbraco CMS, y hemos estudiado el uso de la solución 51Degrees.mobi, y en este momento esto no funcionará para nuestras necesidades. Quizás 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 saldrá por un par de meses.
Por lo tanto, ¿por qué nos gustaría detectar la cadena Useragent de una tableta Android y no lo tenemos directamente en 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.

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

    Esto es incorrecto. Mobile Android tiene cadena "Mobile" en el encabezado User-Agent. Tablet Android no lo hace.

    @ Carlos: En su artículo Tim Bray recomienda esto (al igual que otro post de Google ), pero lamentablemente 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 usuarios de Android de agente de usuario que he visto el uso de safari móvil, por ejemplo, el Samsung Galaxy Tab:

    Safari móvil / 533.1 (KHTML, como Gecko) Versión / 4.0 (Linux, U, Android 2.2, en-us, SCH-I800 Build / FROYO)

    Así que por el momento estoy revisando los nombres de dispositivos para detectar tablets Android. Mientras que hay apenas algunos modelos en el mercado, que es aceptable pero pronto esto será una solución fea.

    Al menos en el caso de la XOOM, la parte móvil parece haber desaparecido:

    Safari / 534.13 (KHTML, como Gecko) Versión / 4.0 (Linux, U, Android 3.0, es-es, Xoom Build / HRI39)

    Pero como actualmente sólo hay tabletas con Andorid 3.x, comprobar en Android 3 sería suficiente.

    Mo 'mejor para detectar también "móvil" user-agent

    Si bien es posible que todavía desee detectar "android" en el User-Agent para implementar las características específicas de Android, como optimizaciones de la pantalla táctil, nuestro mensaje principal es: Si su sitio móvil depende del sniffing UA, detecte las cadenas "mobile" Y "android", en lugar de simplemente "android", en el User-Agent. Esto ayuda a atender correctamente a los visitantes de tu móvil y tablet.

    Detección de dispositivos 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> 

    Puede probar este script ya que no desea apuntar sólo a 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. Compruébelo – https://github.com/codefuze/js-mobile-tablet-redirect . Siéntase libre de enviar problemas si hay algo malo!

    Una vez que he detectado Android en el agente de usuario, así es como distingo entre navegadores de tableta y de teléfonos inteligentes (esto es utilizando Python, pero es similarmente sencillo 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.

    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. Tableta
    2. iPad

    Segundo:

    Todos los dispositivos de teléfono tienen:
    1. Móvil
    2. Teléfono

    Tercero:

    Tablet y dispositivos de teléfono tienen:
    1. Android

    Si puedes detectar nivel por nivel, creo que el resultado es un 90 por ciento cierto. Al igual que los canales de dispositivos de SharePoint.

    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 } 

    Aunque no podemos decir si algunas tablillas omitir "móvil", muchos incluyendo el Samsung Galaxy Tab tienen móvil en su user-agent, lo que hace imposible detectar entre una tableta android y 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 ampliar su lista de dispositivos mensualmente.

    Desafortunadamente, la mejor solución aquí es quejarse a Google sobre esto y conseguir que arreglen Chrome para Android por lo que 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 tiene mucho sentido.

    Xoom tiene la palabra Xoom en el user-agent: Mozilla / 5.0 (Linux, U, Android 3.0.1, en-us, Xoom Build / HRI66) / Safari / 534.13 (KHTML, como Gecko)

    Galaxy Tab tiene "Mobile" en el agente de usuario: Mozilla / 5.0 (Linux, U, Android 2.2, en-us, SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, como Gecko) Versión / 4.0 Mobile Safari / 533.1

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

    La mayoría de las tabletas modernas funcionan con panal aka 3.x No hay teléfonos que funcionen 3.x de forma predeterminada. La mayoría de las tabletas que actualmente ejecutan 2.x tienen menos capacidad y podrían ser mejores cuando se les presenta un sitio móvil de todos modos. Sé que no es impecable .. pero supongo que es mucho más preciso que la ausencia de móviles.

    Si bien Android móvil puede tener "móvil" en su cadena de usuario-agente, ¿qué pasa si se utiliza Opera Mobile para Android en un Tablet? Todavía tendrá "móvil" en su cadena de user-agent, pero debería mostrar los sitios de tamaño Tablet. Usted necesitará probar para "móvil" que no es precedido por "ópera" en lugar de sólo "móvil"

    O simplemente podría olvidarse de Opera Mobile.

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

    Si utiliza la ausencia de "Mobile", entonces su casi correcto. Sin embargo, hay HTC Sensation 4G (4,3 pulgadas con Android 2.X), que no envía la palabra clave Mobile.

    La razón por la que tal vez quiera tratarla por separado es debido a iframes etc.

    Los 51Degrees beta, 1.0.1.6 y la última versión estable 1.0.2.2 (4/28/2011) ahora tienen la capacidad de oler para la tableta. Básicamente en la línea de:

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

    Espero que esto te ayude.

    Pruebe OpenDDR , es libre a diferencia de la mayoría de las otras soluciones mencionadas.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.