Desarrollo de aplicaciones Android: cómo empezar con la ubicación
Muchas aplicaciones de Android pueden proporcionar un buen beneficio para sus usuarios trayendo ubicación en sus experiencias de usuario. Ya se trate de algo tan simple como mostrar a los usuarios de su ubicación en un mapa o algo más complejo como el suministro de notificaciones fondo basados en GPS, la adición de servicios de ubicación para su aplicación a menudo es algo que los usuarios esperan.
Conteúdo
Hay muchas maneras que usted puede agregar ubicación a tus aplicaciones de Android. En Lollipop, algunos de los más comunes son
Visualizar la ciudad de direcciones o en la calle actual del usuario. Esto se llama inversa geo-codificación.
Activamente un seguimiento de la ubicación del usuario, tales como cuando se muestra la ubicación del usuario en un mapa.
Establecer un geocerca para obtener una notificación cuando un usuario llega o sale de un lugar.
Ubicación de los usuarios de la pista para realizar el reconocimiento de la actividad y determinar si están caminando, en bicicleta o conducir.
Detectar si un usuario está cerca de un IBeacon mediante Bluetooth.
En este artículo se muestra uno de los usos más comunes de la ubicación, que es para controlar la ubicación de los usuarios y mostrar su dirección actual a ellos en una TextView.
Tendrá que hacer cuatro cosas para establecer lugares de su aplicación:
Modificar una configuración de generación.
Abrir una conexión a Google Play.
Suscribirse a las actualizaciones de ubicación.
Muestra la dirección del usuario.
Cómo actualizar la configuración de generación
Android tiene un conjunto más antiguo de Ubicación API incorporadas al sistema operativo en el marco del android.location paquete. Estas API ya no se mantienen, por lo que debe utilizar el nuevo Google Play Servicios API para obtener la ubicación del usuario en su lugar.
Para añadir Google Play Servicios API de ubicación a su proyecto, coloque la siguiente dependencia en su build.config archivo:
dependencias { compilar 'com.google.android.gms: play-servicios-location: 05.06.87'}
A continuación, añada lo siguiente a su AndroidManifest.xml:
="android.permission.ACCESS_COARSE_LOCATION"/>="android.permission.ACCESS_FINE_LOCATION"/>android: name ="com.google.android.gms.version"android: valor ="@ entero / google_play_services_version"/>
los ACCESS_COARSE_LOCATION permiso utiliza Wi-Fi e información antena de telefonía móvil, cuando esté disponible, para proporcionar la ubicación actualiza más o menos del tamaño de una manzana. los ACCESS_FINE_LOCATION el permiso se puede obtener mucha información de mayor resolución utilizando el GPS del teléfono, pero a costa de un mayor consumo de la batería. Si su aplicación necesita único lugar gruesa, se podría pensar que tiene sentido pedir sólo el ACCESS_COARSE_LOCATION permiso, pero en realidad la mayoría de las aplicaciones querrá ambos permisos.
Generalmente, usted debe solicitar dos permisos porque usted va a utilizar un LocationProvider llamó al FusedLocationProvider, que elige automáticamente entre Wi-Fi, antena de telefonía móvil y proveedores de localización GPS para darle la mejor precisión al menor costo a la batería. Si sabe que nunca necesitará información de ubicación fina, se puede considerar la eliminación de la ACCESS_FINE_LOCATION permiso, pero tenga en cuenta que su aplicación puede no funcionar bien en lugares que no cuentan con antena de telefonía móvil o Wi-Fi.
los metadatos etiqueta es necesaria cada vez que utilice el Google Play biblioteca Servicio.
¿Cómo abrir una conexión a Google Play
Las API Ubicación son muy simples, pero para usarlos tendrás que configurar los servicios de Google Play APIs, y esos son un poco más complicado de usar.
Para establecer una conexión con el Google Play Servicios, añada lo siguiente a su actividad o fragmento:
// El cliente API de Google, para fijación servicesGoogleApiClient googleApiClient- @ Overridepublic void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -googleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build()-…}@Overridepublic void onStart () {super.onStart () -googleApiClient.connect () -}Overridepublic Anular OnStop () {googleApiClient.disconnect () -super.onStop () -}
Este código crea un nuevo GoogleApiClient objeto en su onCreate () para conectarse a Google Play Services y, a continuación, intenta conectarse en su onStart () y desconecte en su OnStop (). los GoogleApiClient necesita un objeto de devolución de llamada que se puede informar cuando se ha establecido una conexión, por lo que es necesario agregar devoluciones de llamada a su actividad o fragmento. Usted puede agregar las devoluciones de llamada a la TaskEditFragment a cualquier actividad del fragmento.
public class TaskEditFragment extiende implementos FragmentoConnectionCallbacks, OnConnectionFailedListener{ @ Override public void onConnected (Bundle connectionHint) {// Conectado a Google Play servicios!// Aquí es donde usted va a empezar a preguntar por la ubicación// Actualizaciones. } @ Override public void onConnectionSuspended (int causa) {// El Google Play conexión se ha interrumpido.// Desactive los componentes de interfaz de usuario que dependen de Google // API hasta onConnected () se llama.//// Este ejemplo doesn't tiene que hacer cualquier cosa aquí. } @ Override public void onConnectionFailed (resultado ConnectionResult) {// Esta devolución de llamada es importante para el manejo de errores // Que puede producirse al intentar conectar con // Google.//// Si su aplicación ganó't trabajo correctamente sin ubicación// Actualizaciones, entonces's importante manejar la conexión // Errores correctamente. Ver// Https://developer.android.com/google/auth/api-client.html// Para obtener más información sobre el manejo de errores al // Conectarse a Google.//// La información de ubicación es opcional para esta aplicación, por lo // Errores de conexión pueden ser ignorados de forma segura aquí. }}
¡Felicidades! Has ahora correctamente configurado una conexión a servicios de Google Play que se desconecte automáticamente cuando se detiene su actividad o fragmento. El siguiente paso es solicitar actualizaciones de ubicación.
Cómo suscribirse a actualizaciones de ubicación
Usted ha llegado a través de la parte más difícil. Una vez que tenga una conexión exitosa a Google Play Services, puede empezar a escuchar para actualizaciones de ubicación.
Primero tiene que decirle a la API de ubicación con qué frecuencia y cómo es exacto usted quiere que sus actualizaciones de ubicación sean. Si tiene que mostrar la ubicación actual de los usuarios a ellos en un mapa, tal vez usted querrá cambios muy precisos y rápidos, por lo que los usuarios pueden ver dónde están cuando se mueven alrededor. La mayoría de las aplicaciones, probablemente necesitan cambios menos frecuentes, y eso es lo que vamos a usar en este ejemplo.
Agregue el siguiente campo a su fragmento o la actividad:
// El LocationRequest define la frecuencia con la que necesitamos ubicación // updatesLocationRequest LocationRequest = new LocationRequest () setInterval (30000) .setPriority (LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY). -
Esta LocationRequest está configurado para pedir nuevas actualizaciones de ubicación aproximadamente cada 30 segundos, y para tratar de equilibrar una buena precisión con el consumo de energía decente. Si quieres un menor consumo de batería, trate PRIORITY_LOW_POWER, o si desea una mayor precisión, trate PRIORITY_HIGH_ACCURACY. Usted puede incluso utilizar PRIORITY_NO_POWER para las aplicaciones que se actualizan con muy poca frecuencia en el fondo y sólo quiero Piggy-detrás de la ubicación actualiza esa petición otras aplicaciones! Echa un vistazo a LocationRequest en el sitio para desarrolladores de Android para obtener más información sobre las distintas opciones que puede utilizar.
Para empezar a escuchar para actualizaciones de ubicación, agregue lo siguiente a la onConnected () método que acaba de crear:
Overridepublic Anular onConnected (Bundle connectionHint) {// conectado a Google Play servicios! // Inicia la suscripción de actualizaciones de ubicaciónFusedLocationApi.requestLocationUpdates ( googleApiClient, LocationRequest, esto) -}
Esta pide a la FusedLocationApi para empezar a enviar sus aplicaciones actualizaciones de ubicación utilizando el LocationRequest que acaba de configurar. Para que funcione, sin embargo, es necesario proporcionar un objeto de devolución de llamada que puede recibir las actualizaciones de ubicación. Agregue el LocationListener interactuar con su actividad o fragmento, y luego añadir el onLocationchanged () método de este modo:
public class TaskEditFragment extiende implementsConnectionCallbacks Fragmento, OnConnectionFailedListener,com.google.android.gms.location.LocationListener{ @ Override public void onLocationchanged (ubicación final Lugar) {Toast.makeText (getActivity (), location.toString (), Toast.LENGTH_LONG) .show () -}}
Por cierto, si lo único que importa es la ubicación actual del usuario, y no se preocupan por mantenerla actualizada, echa un vistazo FusedLocationApi.getLastLocation (), que elimina la necesidad de la LocationListener interfaz.
Ahora, si ejecuta su actividad, debería ver un mensaje tostadas que imprime la ubicación actual del usuario.
Ser capaz de ver sus coordenadas GPS no es realmente tan útil para los usuarios por sí mismo, sin embargo, así que vamos a usar su ubicación para averiguar su dirección actual y mostrar a ellos.
Cómo mostrar la dirección del usuario
Android tiene un built-in API denominada geocodificador para buscar la dirección de un usuario de su o sus coordenadas GPS (y viceversa).
Es muy sencillo de usar. El único problema es que, ya que hace una solicitud de red de Google en el subproceso actual, le toca a usted para asegurarse de que sólo se ejecuta en el subproceso de fondo (de manera que no causen un bloqueo en el hilo principal de la interfaz de usuario en la lenta redes).
Añadir lo siguiente a su actividad o fragmento:
Geocoder geocoder- @ Overridepublic void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - ... geocodificador = new Geocoder (getActivity ()) -} @ vacío Overridepublic onLocationchanged (ubicación final Ubicación) {// Pregunta google para la dirección del ubicación .// Esto puede tomar un tiempo, por lo que hacerlo de una AsyncTask AsyncTask.new () {DirecciónOverrideprotected doInBackground (Void [] params) {try {Lista direcciones = geocoder.getFromLocation (location.getLatitude (), location.getLongitude (), 1), si (direcciones! = null addresses.size ()> 0)volver addresses.get (0) - } Catch (IOException e) { // Ignorado}volver null- } // Se realiza en el hilo de interfaz de usuario @ Override protected void onPostExecute (dirección Dirección) {if (! address = null) { String s = address.getThoroughfare () - si (s! = null)Toast.makeText (getActivity (), s, Toast.LENGTH_LONG) .show () -} }} .Execute () - }
Este código añade un campo Geocoder a su actividad o fragmento, lo inicializa en onCreate (), y luego lo utiliza en onLocationchanged () para encontrar la dirección de la ubicación actual. A continuación, muestra un mensaje Tostada con la "vía" para el ejemplo de direcciones-para ", 600 West Chicago Avenue." El objeto devuelto por la Dirección Geocoder es rico detallada puedes ver los javadocs para más detalles sobre qué más se puede mostrar.
Y con eso, tienes casi todo lo que necesita saber sobre la suscripción a la ubicación actual del usuario dentro de una actividad o un fragmento de Android.