/ / No se puede acceder a la ubicación geográfica desde una página web en Android cuando se utiliza el navegador integrado en una aplicación: javascript, android, delphi, geolocation, twebbrowser

No se puede acceder a la ubicación geográfica desde una página web en Android cuando se utiliza el navegador integrado en una aplicación: javascript, android, delphi, geolocation, twebbrowser

estoy usando navigator.geolocation.getCurrentPosition() para obtener la ubicación actual del usuario. La función de ubicación en estas páginas web funciona bien cuando se carga directamente en un navegador web en iOS y Android. Al usuario se le pregunta si permite el acceso a la ubicación y va desde allí. No importa qué navegador web o sistema operativo, todos funcionan bien.

Sin embargo, si la misma página web se carga en un navegador web incrustado en una aplicación ejecutándose en Android (el componente TWebBrowser en este caso), el servicio de ubicación no funciona. Una llamada a navigator.geolocation.getCurrentPosition() resultados en permission_denied mensaje de error. El usuario NO se pregunta siquiera si permitirían el acceso a la ubicación; solo levanta el error permission_denied.

Algunas de las cosas obvias que he comprobado:

  • El código está precedido por if (navigator.geolocation) { entonces se que La capacidad de geolocalización está ahí.
  • La aplicación se ha creado e implementado con permisos para los servicios de ubicación, lo que funciona bien ya que la aplicación accede a los servicios de ubicación en otros lugares del código (fuera del navegador, es decir).
  • El permiso denegado solo ocurre en una página web cuando se carga en el navegador web integrado en la aplicación.
  • Solo pasa en Android. iOS funciona bien.
  • El navegador web incorporado en la aplicación invoca elnavegador web nativo disponible en el dispositivo. Es decir, el navegador web que se está utilizando no es uno especial personalizado. La aplicación se construye con Delphi Firemonkey y usa el componente TWebBrowser.

Lo probé en varios dispositivos Android conDiferentes versiones de Android hasta el último v6, y todas se comportan igual. Eso me lleva a pensar que me estoy topando con alguna "característica" del sistema operativo Android. ¿Hay alguna forma de evitarlo, ya que la funcionalidad de mis aplicaciones depende también del acceso a los servicios de ubicación desde la página web?

Como solución alternativa, paso la ubicación actual a la página web en parámetros cuando la llamo desde la aplicación. Pero no puedo usar WatchLocation para actualizar la posición en el mapa cuando el usuario se mueve.

Respuestas

3 para la respuesta № 1

Puedes usar este código para verificar primero los permisos.

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
//    ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
//   public void onRequestPermissionsResult(int requestCode, String[] permissions,
//                                          int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}