No se puede detectar Android en el servidor web

La manera obvia de detectar Android por servidor es buscar la cadena "Android" desde el encabezado HTTP de User-Agent. Pero – he tenido quejas de que esto no funciona en algunos dispositivos (por ejemplo, en mi HTC Evo), no se detectan como Android. Whatsmyuseragent.com da para mi navegador web HTC Evo 3D: Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 534.24 (KHTML, como Gecko) Chrome / 11.0.696.34 Safari / 534.24 . No hay cadena o versión de Android. Podría ser un software de seguridad en el dispositivo que lo altera, o cuestión específica de HTC, no está seguro acerca de ello.

Obviamente Android Chrome en el mismo dispositivo tiene otro, y mejor UA: Mozilla / 5.0 (Linux, Android 4.0.3, HTC EVO 3D X515m Build / IML74K) AppleWebKit / 535.19 (KHTML, como Gecko) Chrome / 18.0.1025.166 Mobile Safari / 535.19 , Pero no puedo esperar que, por ejemplo, la aplicación QR Code reader abra Chrome y no el navegador Android incorporado, que tiene una UA no válida.

¿Hay un buen truco (llamada javascript?) Para detectar de forma fiable Android a través de dispositivos y navegadores?

Editar: parece que el mismo problema con Galaxy S III, misma cadena de User-Agent: Android Phone Browser Detection

Parece que había seleccionado "Mostrar versión de escritorio" en la configuración del navegador web de Android. Una vez apagado, el usuario-agente está con Android dentro. Esto parece ser una característica de ICS, HTC no debe ser culpado: google para el agente de usuario equivocado que he dado a ver que sucede en muchos teléfonos diferentes.

Para esta tarea en particular, podría sugerir el uso de wurfl lado del servidor.

Puedes detectar android haciendo algo muy simple:

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER); if ($requestingDevice->getCapability("device_os") == "Android") { //the magic } 

Comprobar el agente del usuario siempre ha sido la forma recomendada para determinar de forma fiable el dispositivo del usuario, (al menos con la configuración predeterminada de todos modos). Tal vez usted podría tratar de hacer su búsqueda más sólida? Mozilla sugiere buscar la cadena "Mobi" en su lugar.

Lo que entendí de su problema es que usted está recibiendo agente de usuario en algunos dispositivos y en algunos de los dispositivos se niegan a dar eso. Así que estoy asumiendo que usted tiene una aplicación en el dispositivo android que está llamando a su servidor a través de algunos webservice y de que está tratando de extraer el agente de usuario. Por lo que la solución que puedo ver aquí es en la aplicación de Android agregar el parámetro de agente de usuario como de código por lo que se publicará en la cabecera HTTP y desde el servidor se puede extraer fácilmente

 HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android"); 

Tuve el mismo problema pero resolví de esta manera.

  • ¿Cómo puedo supervisar y obtener tráfico http en una aplicación Android?
  • ¿Hay formas de incrustar un navegador en la aplicación para Android?
  • Border-radius no funciona en el moderno navegador nativo de Android
  • ¿Hay alguna manera en Android de forzar la apertura de un enlace para abrirlo en Chrome?
  • El navegador de Android no funciona con la geolocalización
  • Combinando el front-end de html y el "back-end" de python en la aplicación móvil
  • Intentos de Android para abrir el navegador preferido del usuario
  • Android - Distancia entre dos ciudades
  • ¿Cómo abrir un sitio web cuando se hace clic en un botón en la aplicación de Android?
  • ¿Cómo cambiar la página principal del navegador Android predeterminado dentro de una aplicación?
  • Cómo interceptar datos HTTP POST desde un formulario web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.