Cómo obtener y utilizar los datos de localización en su aplicación para Android

 

location_marker_gps_shutterstock Shutterstock

El uso de la ubicación en la aplicación tiene un potencial increíble para que su aplicación parece inteligente para los usuarios finales. Con los datos de localización, la aplicación puede predecir las posibles acciones de un usuario, recomendar medidas o realizar acciones en segundo plano sin interacción del usuario.

En este artículo, discutimos Shall actualizaciones Integrar ubicación en una aplicación para Android, con un enfoque en la recuperación de la latitud y longitud de un solo lugar. Es interesante notar que Ubicación puede (y lo hace) contienen mucho más que los valores de latitud y longitud. También puede tener valores para el aterrizaje, la altitud y la velocidad del dispositivo.

Preparación

Antes de que su aplicación puede recibir datos de ubicación, debe solicitar los permisos de ubicación. Hay dos permisos de ubicación, y ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION. Utilizamos ACCESS_FINE_LOCATION para indicar que queremos recibir, según sea necesario una posible ubicación. This Para solicitar el permiso, añada la siguiente línea a su aplicación manifiesta


Así que tenemos que seleccionar la ubicación que los proveedores que utilizamos para obtener los datos de localización. Actualmente hay tres proveedores:

  • GPS_PROVIDER: El método más exacto, que utilizan el receptor GPS integrado de la unidad. El GPS es un sistema de satélites en órbita, que proporciona información sobre la ubicación desde casi cualquier lugar en la tierra. A veces puede tomar algún tiempo para obtener una solución de localización GPS (por lo general más rápido Cuando la cámara está en el exterior).
  • NETWORK_PROVIDER: Este método determina la ubicación de un dispositivo mediante los datos recogidos de las torres de celulares de los alrededores y los puntos de acceso WiFi. Aunque no es tan preciso como el método GPS, que proporciona una representación bastante adecuada de la ubicación del dispositivo.
  • PASSIVE_PROVIDER: Este proveedor es especial, lo que indica que su aplicación, no se iniciará whos una posición fija, pero el uso de las actualizaciones de ubicación recibidas por otras aplicaciones / servicios. En otras palabras, el proveedor utilizará los datos de localización pasiva es proporcionada por los proveedores de GPS o redes. Usted puede descubrir cuáles son sus whos proveedor pasivos proveedor utiliza con GetProvider () devuelven el método de ubicación. Esta batería ofrece el mayor ahorro.

Modelo

aa_location_layout

Para nuestra aplicación, vamos a recuperar los datos utilizando el proveedor de localización GPS, el proveedor de la red, y también pidiendo la máquina para elegir el mejor proveedor que está disponible como el cumplimiento de una serie de criterios . Nuestro diseño se compone de tres segmentos idénticos, cada uno de los cuales contiene:

  • Un título para la sección, UBICACIÓN: como el GPS
  • botón para hacer una pausa y reanudar las actualizaciones de localización de la sección / proveedor
  • Longitud Valor
  • Latitud Valor

El fragmento de código para la sección de GPS de nuestro archivo de diseño / activity_main.xml se muestra a continuación


MainActivity

Es posible que su dispositivo de usuario tiene configuraciones para minusválidos. Antes de solicitar información de ubicación, debemos comprobar los servicios de localización están habilitadas. Vote por los datos de localización con ajustes off volver nulo. Para comprobar si la ubicación está activada, implementamos un método llamado isLocationEnabled (), se muestra a continuación:

 isLocationEnabled private boolean () {
retorno locationManager.isProviderEnabled (LocationManager.GPS_PROVIDER) ||
locationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER);

Todo lo que pedimos si el LocationManager De cualquier GPS_PROVIDER o NETWORK_PROVIDER está disponible. Si el usuario ha desactivado lugar, queremos ayudarles a llegar a la ubicación de la pantalla tan fácil y rápidamente como sea posible dar la vuelta y regresar a nuestra aplicación. Para ello, estamos implementando el método showAlert ().

 showAlert private void () 
Finales de diálogo AlertDialog.Builder AlertDialog.Builder = new (this);
dialog.setTitle ("Turn ubicación")
.setMessage ("Sus lugares de ajustes está ajustado en" Off ".  nPor favor, permite la localización de" +
"Utilice esta aplicación")
.setPositiveButton ("Configuración de ubicación" nueva DialogInterface.OnClickListener () 
Anular
public void onClick (DialogInterface paramDialogInterface, paramInt int) 
MyIntent intención = new Intent (Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity (myIntent);

)
.setNegativeButton ("Cancelar" nuevo DialogInterface.OnClickListener () 
Anular
public void onClick (DialogInterface paramDialogInterface, paramInt int) 

);
Dialog.Show ();

La línea más interesante en el fragmento anterior es en el método setPositiveButton (). Comenzamos una actividad utilizando Settings.ACTION_LOCATION_SOURCE_SETTINGS intención de, por lo que cuando el usuario hace clic en el botón, que son llevados a la pantalla Configuración de ubicación.

aa_location_settings

Consigue actualizaciones de ubicación

para llegar hasta a la fecha y la red de localización GPS, se utiliza uno de los requestLocationUpdates LocationManager (métodos). Nuestro se prefiere requestLocationUpdates (proveedor de cadena int UPDATETIME, int updateDistance, LocationListener auditor) . UPDATETIME se refiere a la frecuencia con la que exigimos de cambios, mientras que updateDistance Se refiere a la distancia antes de que necesitamos una actualización. Tenga en cuenta que UPDATETIME simplemente especifica el tiempo mínimo antes de que exigimos una nueva actualización. Esto significa que el tiempo entre las actualizaciones de corriente puede ser más UPDATETIME pero no menos.
un punto muy importante a considerar es que el estado de boleta utilizar más energía de la batería. Si su aplicación no requiere actualizaciones de localización Cuando en el fondo, dejar de actualizaciones Considere el uso de una de removeUpdates (métodos). En el siguiente fragmento de código, comenzamos / parada de actualización de posición hecha en respuesta a un clic en el botón correspondiente.

 toggleGPSUpdates public void (Ver vista) 
if (! checkLocation ())
retorno;
Botón Botón = vista (Button);
si (button.getText (). equals (getResources (). getString (R.string.pause))) 
locationManager.removeUpdates (locationListenerGPS);
button.setText (R.string.resume);

else 
(LocationManager.requestLocationUpdates
LocationManager.GPS_PROVIDER, 2 * 60 * 1000, 10, locationListenerGPS);
button.setText (R.string.pause);


aa_location_gps

En dos y NETWORK_PROVIDER PASSIVE_PROVIDER, simplemente reemplace GPS_PROVIDER anteriormente con el nombre que quieras.

Si lo que desea es elegir el mejor proveedor disponible, no es un método LocationManager getBestProvider () que le permite hacer precisamente eso. Ustedes ciertos criterios que se utilizarán en la selección del proveedor, que es lo mejor, y le proporcionará Determina LocationManager alguna el mejor ajuste. Un ejemplo de código, y es lo que usamos para seleccionar un proveedor:

 criterios Criterios = new Criteria ();
criteria.setAccuracy (Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired (false);
criteria.setBearingRequired (false);
criteria.setCostAllowed (true);
criteria.setPowerRequirement (Criteria.POWER_LOW);
Cadena Provider = locationManager.getBestProvider (criterios, true);
if (! proveedor = null) 
locationManager.requestLocationUpdates (proveedor, 2 * 60 * 1000, 10, locationListenerBest);
button.setText (R.string.pause);
Toast.makeText (this, "Mejor proveedor es" + proveedor Toast.LENGTH_LONG) .Show ();

Usando el código y los criterios anteriores, el mejor proveedor GPS_PROVIDER donde ambos GPS y la red están disponibles. Sin embargo, si el GPS está apagado, el NETWORK_PROVIDER y Escogido será devuelto como el mejor proveedor.

aa_location_best_provider

LocationListener

El LocationListener es una interfaz para recibir actualizaciones de LocationManager Ubicación. Tiene cuatro métodos

    • OnLocationChanged () – llamada Cada vez que hay una actualización del LocationManager

.

  • OnStatusChanged () – Cuando los llamados cambios de estado de proveedor, por ejemplo, se hace disponible después de un período de inactividad
  • onProviderDisabled () – Llamado cuando el usuario desactiva el proveedor. ¿Te gustaría que alerta al usuario si se reduce esta funcionalidad this de su aplicación
  • onProviderEnabled () – Cuando el usuario llama proveedor Activo

Ponemos en práctica el método OnLocationChanged () a la muestra de esta, pero en una aplicación de producción, lo más probable es que desee realizar una acción apropiada para cada situación.

 final LocationListener privada LocationListener locationListenerNetwork = new () 
public void OnLocationChanged (Ubicación) 
location.getLongitude longitudeNetwork = ();
location.getLatitude latitudeNetwork = ();
runOnUiThread (nueva Ejecutable () 
Anular
public void run () 
longitudeValueNetwork.setText (longitudeNetwork + "");
latitudeValueNetwork.setText (latitudeNetwork + "");
Toast.makeText (MainActivity.this ", actualizar la red de proveedores", Toast.LENGTH_SHORT) .Show ();

);

Anular
public void OnStatusChanged (String s, int i, Bulto bulto) 

Anular
public void onProviderEnabled (String s) 

Anular
public void onProviderDisabled (String s) 

;

Android Developer Newsletter

Conclusión

El código fuente completo es disponible en GitHub para el uso (o el mal uso) como desee. Sólo ten en cuenta lo siguiente:

  • La ​​integración de seguimiento de localización en sus aplicaciones drena la batería.
  • recomienda Google mi petición actualiza cada 5 minutos (5 * 60 * 1000 milisegundos). Es posible que tenga actualizaciones más rápidas si su aplicación está en primer plano (la aptitud / rastreador remoto).
  • Los usuarios pueden tener lugar con discapacidad. Usted debe tener un plan para los ajustes de localización Cuando se desactiva.

Diviértete creando aplicaciones para Android, y mirar hacia fuera para nuestro próximo tutorial donde utilizamos los datos de localización de dispositivos Android y API web para crear algo más divertido y desafiante.

ESCRIBE UN COMENTARIO