Cómo obtener y utilizar los datos de localización en su aplicación para Android
Shutterstock
El uso de Ubicación en su aplicación tiene un potencial increíble en hacer que su aplicación parece inteligente para los usuarios finales. Con los datos de localización, su aplicación puede predecir las posibles acciones de un usuario, recomendar acciones, o llevar a cabo acciones en el plano sin interacción del usuario.
Para este artículo, vamos a discutir la integración de actualizaciones de ubicación en una aplicación para Android, con un enfoque en ir a buscar la latitud y longitud de tan sólo un lugar determinado. Vale la pena señalar que Localización puede (y lo hace) contienen mucho más que simplemente los valores de latitud y longitud. También puede tener valores para el cojinete, la altitud y la velocidad del dispositivo.
Preparación
Antes de que su aplicación puede recibir datos de ubicación, debe solicitar permisos de ubicación. Hay dos permisos de ubicación, ACCESS_FINE_LOCATION y ACCESS_COARSE_LOCATION. Utilizamos ACCESS_FINE_LOCATION para indicar que queremos recibir lo más precisa una ubicación posible. Para solicitar este permiso, añada lo siguiente a su aplicación manifiesta:
También tenemos que seleccionar cuál de los proveedores de la ubicación que queremos utilizar para obtener los datos de localización. Actualmente hay tres proveedores:
- GPS_PROVIDER: El método más exacto, que utiliza el receptor GPS integrado del dispositivo. GPS es un sistema de satélites en órbita, que proporciona información de ubicación desde casi cualquier lugar en la tierra. A veces puede tomar un tiempo para conseguir una solución de localización GPS (generalmente más rápido cuando el dispositivo está al aire libre).
- NETWORK_PROVIDER: Este método permite determinar la ubicación de un dispositivo mediante los datos recogidos de las torres de celulares de los alrededores y los puntos de acceso WiFi. Si bien 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, ya que indica que su aplicación no quiere iniciar en realidad una solución ubicación, pero utiliza las actualizaciones de ubicación recibidas por otras aplicaciones / servicios. En otras palabras, el proveedor pasiva utilizará los datos de localización facilitados tanto por el GPS o proveedores de la red. Puede averiguar qué proveedor de su proveedor pasiva realmente utilizar con el método del Lugar de regresar GetProvider (). Esto proporciona el mayor ahorro de batería.
Diseño
Para nuestra aplicación, vamos a buscar los datos de ubicación mediante el proveedor de GPS, el proveedor de la red, y también por pedir el dispositivo para decidir cuál es el mejor proveedor disponible que cumpla con un determinado conjunto de criterios. Nuestro diseño tiene tres segmentos idénticos, cada uno de los cuales contiene:
- Un título para la sección, como la ubicación GPS
- Un botón para reanudar y pausa actualizaciones de ubicación para la sección / proveedor
- Longitud Valor
- Valor Latitud
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
Actividad principal
Es posible que el usuario tiene sus ajustes de dispositivo Ubicación apagados. Antes de solicitar información de ubicación, debemos comprobar que los servicios de ubicación están habilitadas. Sondeo de datos de localización con los ajustes de apagado volverá nulo. Para comprobar si la ubicación está activada, implementamos un método, llamado isLocationEnabled (), se muestra a continuación:
private boolean isLocationEnabled () {return locationManager.isProviderEnabled (LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) -
Simplemente pedimos la LocationManager si bien el GPS_PROVIDER o NETWORK_PROVIDER está disponible. En el caso de que el usuario tiene Ubicación desactivada, queremos ayudarles a llegar a la pantalla de la ubicación tan fácil y rápidamente como sea posible para encenderlo y volver a nuestra aplicación. Para ello, ponemos en práctica el método showAlert ().
showAlert private void () de diálogo AlertDialog.Builder definitivo {= new AlertDialog.Builder (este) -dialog.setTitle ("Habilitar ubicación"). setMessage ("Sus Ubicaciones Ajustes está en 'Off'. nPor favor Activar Ubicación por" + "utilizar esta aplicación"). setPositiveButton ("Configuración de ubicación", nueva DialogInterface.onclickListener () {Overridepublic void onclick (DialogInterface paramDialogInterface, int paramInt) {myIntent Intención = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)-startActivity(myIntent)-}}).setNegativeButton("Cancel", nueva DialogInterface.onclickListener () {Overridepublic void onclick (DialogInterface paramDialogInterface, int paramInt) {}}) - Dialog.Show () -}
La línea más interesante en el fragmento anterior está dentro del método setPositiveButton (). Comenzamos una actividad utilizando la intención Settings.ACTION_LOCATION_SOURCE_SETTINGS, para que cuando el usuario hace clic en el botón, que son llevados a la pantalla Configuración de ubicación.
Obtener actualizaciones de ubicación
Para llegar GPS y red actualizaciones de ubicación, utilizamos una de requestLocationUpdates del LocationManager métodos (). Nuestro preferido es requestLocationUpdates (proveedor de String, int UPDATETIME, int updateDistance, LocationListener oyente). UPDATETIME se refiere a la frecuencia con que se requiere actualizaciones, mientras updateDistance se refiere a la distancia recorrida antes requerimos una actualización. Tenga en cuenta que UPDATETIME simplemente especifica el período de tiempo mínimo antes de que necesitamos una nueva actualización. Esto significa que el tiempo real entre dos actualizaciones puede ser más que UPDATETIME, pero no va a ser menos.
Un punto muy importante a considerar es que la ubicación de votación utiliza más energía de la batería. Si su aplicación no requiere actualizaciones de ubicación cuando, en el fondo, considerar la suspensión actualizaciones usando uno de los métodos (removeUpdates). En el siguiente fragmento de código, nos Stop / Start actualizaciones de ubicación en respuesta al hacer clic en el botón correspondiente.
toggleGPSUpdates public void (Ver vista) {if (! checkLocation ()) botón de retorno-Button = (Button) vista 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) -}}
Por tanto NETWORK_PROVIDER y PASSIVE_PROVIDER, simplemente reemplazar GPS_PROVIDER anterior con su proveedor deseado.
En el caso de que lo que desea es escoger el mejor proveedor disponible, hay un método LocationManager, getBestProvider () que le permite hacer exactamente eso. Puede especificar algunos criterios que se utilizarán en la selección de proveedor es el mejor, y el LocationManager le proporciona lo que se determina es la mejor opción. Aquí hay un código de ejemplo, 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)-String Provider = locationManager.getBestProvider (criterios, verdaderos) -Si (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 criterios anteriores, el mejor proveedor será GPS_PROVIDER, donde ambos GPS y la red están disponibles. Sin embargo, si el GPS está apagado, el NETWORK_PROVIDER será elegido y devuelve como el mejor proveedor.
LocationListener
El LocationListener es una interfaz para recibir actualizaciones Ubicación del LocationManager. Tiene cuatro métodos
- onLocationchanged () - llamado cada vez que hay una actualización del LocationManager.
- OnStatusChanged () - llamados cuando el estado cambia de proveedor, por ejemplo, que esté disponible después de un período de inactividad
- onProviderDisabled () - se llama cuando el usuario desactiva el proveedor. Es posible que desee para alertar al usuario en este caso que se reducirá la funcionalidad de su aplicación
- onProviderEnabled () - se llama cuando el usuario permite al proveedor
Implementamos sólo el método onLocationchanged () para esta muestra, pero en una aplicación de producción, lo más probable es que desee realizar una acción apropiada para cada situación.
última LocationListener locationListenerNetwork = new LocationListener privada () {public void onLocationchanged (ubicación, ubicación) {longitudeNetwork = location.getLongitude () - latitudeNetwork = location.getLatitude () - runOnUiThread (nueva Ejecutable () {Overridepublic void run () {longitudeValueNetwork. setText (longitudeNetwork + "") -latitudeValueNetwork.setText (latitudeNetwork + "") -Toast.makeText (MainActivity.this, "actualizar Proveedor de la red", Toast.LENGTH_SHORT) .show () -}}) -} @ vacío Overridepublic OnStatusChanged (String s, int i, Bulto paquete) {} voidOverridepublic onProviderEnabled (String s) {}Overridepublic anular onProviderDisabled (String s) {}} -
Android Boletín desarrollador
Conclusión
El código fuente completo es disponible en GitHub, para su uso (o mal uso) como mejor le parezca. Sólo tenga en cuenta lo siguiente:
- La integración de seguimiento de localización en sus aplicaciones drena la batería.
- Google recomienda petición aplicaciones 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 / distancia de seguimiento).
- Los usuarios pueden tener lugar apagados. Usted debe tener un plan para cuando la configuración de ubicación está desactivada.
Diviértete construyendo aplicaciones de Android, y cuidado con nuestro próximo tutorial donde hacemos uso de los datos de localización de dispositivos Android y las API de Internet para construir algo aún más divertido y desafiante.