Hola a todos los lectores del blog XamSharp, hace menos de una semana estaba intentando obtener la localización del dispositivo usando Xamarin.Forms y había leído acerca del Plugin de James Montemagno que es un paquete muy bueno, útil y fácil de usar pero lamentablemente no cubría las necesidades que yo necesitaba, así que vi una manera fácil pero un poco más tardada que es usando un DependencyService me funcionó tan bien que ahora quiero compartirlo con todos los lectores del blog!
Aplicación ejecutándose en dispositivos iOS y Android
El dispositivo Android me anda más lento que en el iPhone.
Comenzando
Lo primero que haremos antes que nada es agregar una interfaz llamada «IMyLocation» que es la que se tendrá el método que se comunicará entre ambas plataformas.
Nota: Se me paso a mi la letra i minúscula, pero en realidad era mayúscula
No olvidarnos de poner nuestra interfaz publica, agregaremos el método ObtainMyLocation y debajo un EventHandler que a su vez obtiene la información de otra interfaz que agregaremos abajo únicamente tendrá dos propiedades lat y lng
Configuración del proyecto Android
En el Manifiesto de las propiedades del proyecto .Android seleccionaremos ACCESS_FINE_LOCATION
De la siguiente manera se agregará una clase dentro del proyecto Android
El nombre de la clase será GetMyLocation
Dentro de esta clase podemos ver esta primera parte del código donde en la linea 13 hacemos uso de los espacios de nombre necesarios para la localización
- 16.- Indicamos que será un DependencyServie
- 18.- Utilizamos LocalionEventArgs que hereda de la Interfaz que creamos en un principio «ILocationEventArgs»
- 26.- En la clase GetMyLocation heredamos de Java.Lang.Object, Nuestra interfaz y de ILocationListener
- 36.- Usamos el método OnLocationChanged para cambiar continuamente la posición
Clic aquí para ver esta clase en GitHub
Segunda arte del código:
Como podemos observar hacemos uso del método que creamos en nuestra Interfaz principal, que también nos ayuda a actualizar la localización
Configuración del proyecto iOS
Dentro del info.plist agregaremos manualmente los permisos como se ve en la siguiente imagen
Una manera también de hacerlo es con código y podría ser de la siguiente manera
<key>NSLocationWhenInUseUsageDescription</key>
<string>Allow to get current location </string>
Dentro del proyecto iOS agregaremos una clase [Repetimos el mismo proceso que se hizo en el proyecto Android]
Clic aquí para ver la clase en GitHub
También hacemos uso del método definido en la Interfaz
Configurando el proyecto compartido
Dentro de nuestro proyecto PCL/.Net Standard crearemos un archivo tipo ContentPage (XAML), para que sea nuestra vista principal, la llamé Locationpage
CÓDIGO XAML
Dentro de esta vista tendremos un StackLayout con los siguiente elementos primordiales
- Una Label para Latitud
- Una Label para Latitud
- Un Botón para visitar esa Posición
Dentro del botón agregaremos su propiedad Clicked, para asignarle la visita de la localización en el navegador del dispositivo
CODE-BEHIND
Dentro del code-behind instalnciamos nuestra Interfaz y en el método OnAppearing
le asignamos el valor de latitud y longitud traída de la Interfaz y la asignamos a los labels de la vista haciendo uso del método que se ejecuta sobre cada plataforma.
Dentro del evento del botón agregaremos una variable tipo string que equivalga a la página en internet «https://www.latlong.net/» pero le concatenamos el valor de los labels para así tener una URL
Seguido de eso estuve batallando un poco porque no me había dado cuenta que los labels contaban con comas «,» por eso en la línea 39 se hizo una pequeña modificación haciendo uso del método replace de C# para sustituir las comas por puntos
Como último usamos opcionalmente un Try, Catch para abrir el browser/ Navegador del teléfono y ver la localización que nos da la aplicación y corroborar que es correcta 🙂
Después de hacer esto estaremos listos para ejecutar la aplicación!
Ejecutando el proyecto
Para los dispositivos iOS nos mostrará el mensaje para dar permisos a la aplicación, seguido de la descripción que se agregó en el archivo info.plist, mientras que en Android nos arrojará la ubicación automáticamente
Al dar permisos a la aplicación podremos ver como resultado la Latitud y Logitud de la ubicación del dispositivo y lo podemos ver reflejado en el navegador del teléfono
¡Con esto terminamos el blog del día! espero que les haya gustado, pero sobre todo espero que hayan aprendido algo nuevo este día mis queridos Xamaritanos
No olviden seguir al blog para recibir notificaciones cada vez que suba nuevo contenido
Visita el código fuente en GitHub
Luis David De La Cruz Bautista
Funciona excelente, sin embargo en los equipos nuevos, sale un error en la linea Loc = DependencyService.Get(); debido a que espera que el usuario de permisos de gps, cómo resolviste esto?
saludos
Me gustaMe gusta
Qué tal Magdiel, he leído eso antes y realmente no lo he resuelto ya que no tengo un equipo reciente como tú dices, en los que los he probado funciona bien
Deja checar con otros equipos y actualizó el post!
Saludos 🙂
Me gustaMe gusta
[…] en este post he hecho algo muy básico pero si gustan pueden revisar mi post para la Geolocalización y revisar el código en Git que fue desarrollado con […]
Me gustaMe gusta