Android App Desenvolvimento: Como Começar com Local

Muitos aplicativos do Android pode fornecer um benefício agradável para seus usuários, trazendo localização em suas experiências de usuário. Quer se trate de algo tão simples como mostrar aos utilizadores a sua localização em um mapa ou algo mais complexo como o fornecimento de notificações de fundo com base em GPS, a adição de serviços de localização para a sua aplicação é muitas vezes algo que os usuários esperam.

Há muitas maneiras que você pode adicionar localização aos seus aplicativos do Android. Em Lollipop, alguns dos mais comuns são

  • Exibição atual cidade ou rua de endereços do usuário. Isto é chamado inversa geo-codificante.

  • Ativamente rastrear a localização do usuário, como quando mostrando a localização do usuário em um mapa.

  • Configurar uma área demarcada para receber uma notificação quando um usuário chega ou sai de um local.

  • localização dos usuários de trilha para executar reconhecimento de atividade e determinar se eles estão caminhando, andando de bicicleta ou dirigir.

  • Detectar se um usuário está perto de um iBeacon usando Bluetooth.

Este artigo mostra um dos usos mais comuns de localização, que é para monitorar a localização dos usuários e mostrar o seu endereço atual para eles em um TextView.

Você vai precisar fazer quatro coisas para configurar locais em seu aplicativo:

  1. Atualizar sua configuração de compilação.

  2. Abre uma conexão com o Google Play.

  3. Inscrever-se para atualizações de localização.

  4. Exibir o endereço do usuário.

Como atualizar sua configuração de compilação

Android tem um conjunto mais velha de APIs de localização built-in para o sistema operacional sob o android.location pacote. Essas APIs não estão mais mantido, portanto, você deve usar o novo Google Play Services APIs para obter a localização do usuário em seu lugar.

Para adicionar o Google Play Services Location API ao seu projeto, coloque o seguinte dependência em seu build.config Arquivo:

dependências { compilar  'com.google.android.gms: play-serviços de localização: 6.5.87'}

Em seguida, adicione o seguinte ao seu AndroidManifest.xml:

 ="android.permission.ACCESS_COARSE_LOCATION"/> ="android.permission.ACCESS_FINE_LOCATION"/> android: name ="com.google.android.gms.version"android: valor ="@ Inteiro / GOOGLE_PLAY_SERVICES_VERSION"/>

o ACCESS_COARSE_LOCATION permissão usa Wi-Fi e informações de torre de celular, quando disponível, para fornecer localização atualiza aproximadamente do tamanho de um quarteirão da cidade. o ACCESS_FINE_LOCATION permissão você pode obter informações muito de alta resolução usando o GPS do telefone, mas à custa de maior consumo de bateria. Se seu aplicativo precisa apenas de localização grosseiro, você pode pensar que faz sentido para solicitar apenas o ACCESS_COARSE_LOCATION permissão, mas realmente a maioria dos aplicativos vai querer ambas as permissões.

Normalmente deve solicitar as permissões porque você estará usando um LocationProvider Chamou o FusedLocationProvider, que escolhe automaticamente entre Wi-Fi, torre de celular e provedores de localização GPS para lhe dar a melhor precisão com o menor custo para a sua bateria. Se você sabe que nunca vai precisar de informações sobre a localização bem, você pode considerar a remoção da ACCESS_FINE_LOCATION permissão, mas esteja ciente de que a sua aplicação pode não funcionar bem em lugares que não têm torre de celular ou acesso Wi-Fi.

o meta-dados tag é necessária sempre que você usar o Google Play biblioteca Service.

Como abrir uma conexão com o Google Play

As APIs de localização são bastante simples, mas para usá-los você precisa configurar A Google Play APIs de serviços, e esses são um pouco mais complicado de usar.

Para estabelecer uma conexão com o Google Play Services, adicione o seguinte à sua atividade ou fragmento:

// O cliente API do Google, para localização servicesGoogleApiClient googleApiClient- @ Overridepublic vazio onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -googleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build()-…}@Overridepublic vazio onStart () {super.onStart () -googleApiClient.connect () -} @Overridepublic Anular onStop () {googleApiClient.disconnect () -super.onStop () -}

Este código cria um novo GoogleApiClient objeto em seu onCreate () para se conectar ao Google Play Services, e, em seguida, ele tenta se conectar em sua onStart () e desligue na sua onStop (). o GoogleApiClient precisa de um objeto de retorno de chamada que pode informá-lo quando a ligação tiver sido estabelecida, então você precisa adicionar as chamadas de retorno à sua atividade ou fragmento. Você pode adicionar os retornos de chamada para o TaskEditFragment a qualquer atividade do fragmento.

classe pública TaskEditFragment estende implementos FragmentoConnectionCallbacks, OnConnectionFailedListener{ @Sobrepor public void OnConnected (Bundle connectionHint) {// Conectado a serviços do Google Play!// Este é onde você vai começar a pedir para localização// atualizações. } @Sobrepor public void onConnectionSuspended (causa int) {// O Google Play conexão foi interrompida.// Desative todos os componentes de interface do usuário que dependem do Google // APIs até OnConnected () é chamado.//// Este exemplo doesn't precisa fazer nada aqui. } @Sobrepor public void onConnectionFailed (resultado ConnectionResult)  {// Este retorno é importante para os erros de manipulação // Que pode ocorrer durante a tentativa de conectar-se com // Google.//// Se o seu aplicativo ganhou't trabalho corretamente sem localização// atualizações, então ele'é importante para lidar com conexão // Erros adequadamente. Vejo// https://developer.android.com/google/auth/api-client.html// Para obter mais informações sobre a manipulação de erros quando // Ligar para o Google.//// As informações de localização é opcional para este aplicativo, de modo // Erros de conexão pode ser ignorada aqui. }}

Parabéns! Você já devidamente configurado uma conexão com serviços do Google Play que irá desligar automaticamente quando a sua actividade ou fragmento está parado. O próximo passo é solicitar atualizações de localização.

Como se inscrever para atualizações de localização

Você chegou através da parte mais difícil. Uma vez que você tem uma conexão bem-sucedida para o Google Play Services, você pode começar a ouvir para atualizações de localização.

Você primeiro precisa dizer a Location API quantas vezes e quão preciso você quer suas atualizações de local para ser. Se você deve exibir a localização atual dos usuários a eles em um mapa, talvez você vai querer atualizações muito precisas e rápidas, de modo que os usuários podem ver onde eles estão, como eles se movem ao redor. A maioria dos aplicativos provavelmente precisará de atualizações menos frequentes, e é isso que você vai usar neste exemplo.

Adicione o seguinte campo para o seu fragmento ou atividade:

// O LocationRequest define quantas vezes precisamos localização // updatesLocationRequest LocationRequest = new LocationRequest () setInterval (30000) .setPriority (LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY). -

este LocationRequest está configurado para pedir nova localização atualizações aproximadamente a cada 30 segundos e tentar equilibrar boa precisão com o consumo de energia decente. Se você quiser reduzir o consumo da bateria, tente PRIORITY_LOW_POWER, ou se você quiser maior precisão, tente PRIORITY_HIGH_ACCURACY. Você ainda pode usar PRIORITY_NO_POWER para aplicativos que atualizam muito raramente no fundo e só querem piggy-back off a localização atualiza esse pedido outros aplicativos! Confira LocationRequest no site do desenvolvedor do Android Para mais informações sobre as várias opções que você pode usar.

Para começar a ouvir para atualizações de localização, adicione o seguinte ao OnConnected () método que você acabou de criar:

@Overridepublic Anular OnConnected (Bundle connectionHint) {// Conectado a serviços do Google Play! // Iniciar a subscrição de atualizações de localizaçãoFusedLocationApi.requestLocationUpdates ( googleApiClient, LocationRequest, este) -}

Este pede ao FusedLocationApi para começar a enviar a sua localização app actualizações através do LocationRequest que acabou de configurar. Para que ele funcione, porém, você precisa fornecer um objeto de retorno de chamada que podem receber as atualizações de localização. Adicione o LocationListener interface com sua atividade ou fragmento, e depois adicionar o onLocationchanged () método da seguinte forma:

classe pública TaskEditFragment estende implementsConnectionCallbacks Fragmento, OnConnectionFailedListener,com.google.android.gms.location.LocationListener{ @Sobrepor public void onLocationchanged (última localização Location)  {Toast.makeText (getActivity (), location.toString (), Toast.LENGTH_LONG) .mostrar () -}}

By the way, se tudo o que interessa é a localização atual do usuário, e você não se preocupam com mantendo-o atualizado, veja FusedLocationApi.getLastLocation (), que elimina a necessidade de o LocationListener interface.

Agora, se você executar sua atividade, você deve ver uma mensagem de brinde que imprime localização atual do usuário.

image0.png

Ser capaz de ver as suas coordenadas GPS não é realmente tudo o que útil para os usuários por si, embora, por isso vamos usar a sua localização para descobrir seu novo endereço e exibi-lo para eles.

Como exibir o endereço do usuário

Android tem uma API built-in chamado geocoder para procurar o endereço de um usuário a partir de seu coordenadas GPS (e vice-versa).

É muito simples de usar. O único problema é que, porque ele faz uma solicitação de rede para o Google no segmento atual, cabe a você para certificar-se você só executá-lo no segmento de segundo plano (de modo que você não causar uma pendurar sobre o segmento principal interface do usuário no lento redes).

Adicione o seguinte à sua atividade ou fragmento:

Geocoder geocoder- @ Overridepublic vazio onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - ... geocoder = new Geocoder (getActivity ()) -} @ vazio Overridepublic onLocationchanged (última localização Location) {// pedir ao Google para o endereço do location.// Isso pode levar algum tempo, assim fazê-lo em um AsyncTask.new AsyncTask () {@Overrideprotected Endereço doInBackground (void [] params) {try {List
addresses = geocoder.getFromLocation (location.getLatitude (), location.getLongitude (), 1) -se (endereços! = null addresses.size ()> 0)voltar addresses.get (0) -} Catch (IOException e) { // ignorado}retornar nulo- } // Executada no segmento interface do usuário @Sobrepor protegidas OnPostExecute void (endereço de Endereço) {if (endereço! = null) { String s = address.getThoroughfare () - if (s! = null)Toast.makeText (getActivity (), s, Toast.LENGTH_LONG) .mostrar () -} }}.executar()- }

Este código adiciona um campo Geocoder à sua atividade ou fragmento, inicializa-lo em onCreate (), e então usa-lo em onLocationchanged () para encontrar o endereço para o local atual. Em seguida, exibe uma mensagem de brinde com a "passagem" para o exemplo de endereço-para ", 600 West Chicago Avenue." o Endereço objeto retornado pela Geocoder é rica em informações confira o javadocs para obter detalhes sobre o que mais você pode exibir.

E com isso, você tem tudo o que você precisa saber sobre a subscrição de localização atual do usuário a partir de uma atividade ou fragmento Android.

menu