Location API no Android, Atualização de Localização - Parte 2

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Location API no Android, Atualização de Localização - Parte 2

Location API no Android, Atualização de Localização - Parte 2

Vinícius Thiengo
(8120) (9)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloCraftsmanship Limpo: Disciplinas, Padrões e ética
CategoriaDesenvolvimento Web
Autor(es)Robert C. Martin
EditoraAlta Books
Edição
Ano2023
Páginas416
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

Nesta segunda parte da série de artigos (vídeos) sobre a Location API no Android vamos entender, passo a passo, como utilizar as importantes APIs LocationRequest e LocationListener para manter atualizado o objeto de coordenadas do aplicativo.

Aplicativo Android para testes com a Location API

Digo, atualizado quanto ao local do usuário, mais precisamente: o local do aparelho do usuário.

É importante que você entenda "100%" o funcionamento dos métodos setInterval() e setFastestInterval() também apresentados no vídeo acima.

Isso, pois o total entendimento do funcionamento desses métodos fará com que você não se perca quanto ao algoritmo de atualização de coordenadas enviadas ao listener onLocationChanged() (API que vez ou outra no vídeo eu o chamo de trigger ao invés de listener).

Também destrincharemos nesta aula o método setPriority(), método que nos permite definir:

"Qual será a forma prioritária de utilizar o Fused Provider" ao invés de "qual é o provider a ser utilizado".

Note também no vídeo que o algoritmo de "update de coordenadas" está rodando somente quando o aplicativo está aberto, em primeiro plano (foreground).

Provavelmente no último vídeo da série será apresentada uma implementação com esse algoritmo de update rodando no background com um Service e um ResultReceiver (essa última API para quando o aplicativo estiver em primeiro plano).

Antes de finalizar, vou deixar alguns links de outros conteúdos aqui do Blog que lhe colocarão em dia com o que há de mais atual no mundo do desenvolvimento de apps Android:

E caso você tenha como meta aprender a criar aplicativos Android, ou evoluir nesta área, também com o conteúdo gratuito do Blog e canal, então não deixe de acessar a lista de estudos gratuita e exclusiva:

Não esqueça de se inscrever 📫na lista de e-mails do Blog para receber os conteúdos Android em primeira mão e também em formato PDF (esse formato é liberado somente para os inscritos na lista de e-mails).

Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades.

Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.

Obs. : o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, mais precisamente na seção "Download".

Abraço.

Dica importante

Quando vejo desenvolvedores estudando APIs de coordenadas, logo me vem a cabeça 🤔 se uma Intent do Google Maps já não seria o suficiente.

Sendo assim, depois de consumir este artigo não deixe de também conhecer essa ferramenta sensacional e nativa Android:

Versão do Android Studio IDE

Apesar da versão do Android Studio IDE no vídeo não ser a mais atual disponível, isso não deve ser um empecilho para você estudar a Location API por está série de conteúdos.

Até porque a versão do Android Studio não influencia em nada em quais APIs serão utilizadas e como essas serão trabalhadas em código.

Logo, siga tranquilo(a) o tutorial com a versão Android Studio que você tem em seu ambiente de desenvolvimento.

AndroidX

Apesar do conteúdo sobre a Location API ainda estar atual e ser importante para qualquer nível de desenvolvedor Android.

Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX (caso ainda não tenha feito).

Algo que pode ser realizado com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.

Aula anterior

Como informado no início deste post, este artigo (vídeo) é a Parte 2 de uma série de cinco partes.

A aula anterior é a:

Próxima aula

A próxima aula é a:

É importante que você siga as aulas na ordem correta para assim poder tirar o máximo proveito da série e então evoluir, como esperado, no mundo de desenvolvimento de aplicativos Android.

Fontes

Receber atualizações periódicas de localização

Página da classe LocationRequest no site de documentação do Android

Área sobre o método getSpeed() da classe Location no site de documentação do Android

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Ícones Com Bootstrap Lib no AndroidÍcones Com Bootstrap Lib no AndroidAndroid
Carregando Dados no ListView Com OnScrollListener e Volley no AndroidCarregando Dados no ListView Com OnScrollListener e Volley no AndroidAndroid
Notificação Interna Com a Lib Crouton no AndroidNotificação Interna Com a Lib Crouton no AndroidAndroid
Obtendo Localização Com Location API no Android - Parte 1Obtendo Localização Com Location API no Android - Parte 1Android

Compartilhar

Comentários Facebook

Comentários Blog (9)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Rafael Nobre (1) (0)
11/02/2019
Boa tarde, estou tendo problemas em pegar a localização do usuário quando o app é fechado, tentei via service, JobScheduler e BroadCastReceiver, vc conhece algum modo que eu possa usar? quando a app está aberta recebo a localização sem problemas, mas ao fechar ele encerra o serviço. pode me ajudar?
Responder
Vinícius Thiengo (1) (0)
17/02/2019
Rafael, tudo bem?

A partir do Android 6, Marshmallow, as regras de negócio para execução de tarefas em background ficaram mais rígidas.

Isso para preservar ainda mais o tempo de vida da bateria do aparelho.

Já vi inúmeras discussões sobre soluções possíveis, mas a que realmente funciona e é recomendada pelo Google Android é:

-> Manter uma API de execução em background para que ela, nas janelas de execução do modo soneca do Android, consiga acionar um algoritmo de obtenção de coordenada e assim manter aquela coordenada até a próxima janela de execução.

Se for necessário o envio da coordenada ao back-end Web de tempos em tempos (de 5 em 5 minutos, por exemplo), então estude a possibilidade de flexibilizar essa regra de negócio em seu domínio de problema, permitindo envios com delays maiores.

Ou então estude os inúmeros algoritmos da comunidade (principalmente no Stack Overflow) que dizem conseguir burlar essas novas regras de negócio de limitação de execução em background.

De qualquer forma, fortemente recomendo o estudo dos conteúdos a seguir para entender mais o que o Google Android permiti e não permiti em background:

-> Limites da execução em segundo plano: https://developer.android.com/about/versions/oreo/background

-> Otimização para soneca e aplicativo em espera: https://developer.android.com/training/monitoring-device-state/doze-standby

Abraço.
Responder
Tiago Silva (1) (0)
18/05/2018
Alguém pode ajudar ,por favor? meu aparelho é API 19  .O método onConnected() está retornando null. Apenas o GPS ativa ,mas não mostra dados algum .
Responder
Vinícius Thiengo (0) (0)
19/05/2018
Tiago, tudo bem?

Isso é possível de acontecer, as vezes demora até alguma coordenada ser retornada. Uma maneira de tentar "driblar" está limitação é utilizando alguma API de terceiro que trabalhe ainda mais recursos para a obtenção de coordenadas, API com a seguinte:

-> https://android-arsenal.com/details/1/1321

Note que estou assumindo que você já tem definido em seu projeto as permissões a seguir: ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION

Note também que a partir do Android 6, Marshmallow, a solicitação destas permissões é em tempo de execução. Mais sobre este assunto no link a seguir:

-> https://www.thiengo.com.br/sistema-de-permissoes-em-tempo-de-execucao-android-m

Abraço.
Responder
05/12/2017
Como faço para criar uma "cerca " GPS, para que quando entrar dentro desta "cerca" execute uma ação?

Podes me dar um exemplo da implementação da "cerca"?

Obrigado.

Parabéns pelo trabalho.
Responder
Vinícius Thiengo (0) (0)
13/12/2017
Abreu, tudo bem?

Os pontos dessa cerca, ou polígono, devem estar em seu banco de dados, com isso, verificando todos os pontos com a coordenada atual do usuário, é possível saber se ele está ou não dentro da área delimitada.

A coordenada atual do usuário é obtida utilizando o Location API, como no conteúdo acima, ou com alguma das APIs de terceiros que facilitam o trabalho de obtenção de coordenadas:

https://android-arsenal.com/tag/55?sort=rating

Os pontos da cerca não têm necessidade de uso de alguma API de rastreamento com a Location API. Podem ser pontos definidos já no banco de dados ou selecionados pelo usuário em uma mapa, Google Maps V2, utilizando o listener de touch no mapa.

Mais sobre os listeners do Google Maps Android no link a seguir:

https://developers.google.com/maps/documentation/android-api/events?hl=pt-br

Caso também queira apresentar a área no maps, o conteúdo do link abaixo pode lhe ajudar com isso:

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polygon

Abreu, a ação será executada depois que seu algoritmo no backend detectar que a coordenada atual do usuário, enviada do Android, está dentro da área definida. O backend pode retornar a conexão Android com alguma flag, por exemplo, informando sobre a necessidade de fazer algo devido o posicionamento atual do user.

Abraço.
Responder
Ricardo (2) (0)
23/02/2015
Thiengo blz, top de mais seus tutoriais, o que voce recomenda fazer por exemplo,queria criar um app que fique mandando a localizacao somente quando for alterada e mesmo quando a aplicacao passou pelo onDestroy() continuo enviando,porem quando tiver um valor x  retornado do service eu cancelo o envio da localizacao.
Responder
Vinícius Thiengo (1) (0)
24/02/2015
Fala Ricardo, blz?
Utilize o setSmallestDisplacement( metros ) ao invés dos métodos de Interval. Ve se assim funciona. Encontrei essa discussão no StackOverflow (http://stackoverflow.com/questions/19520518/google-play-services-locatio-api-setsmallestdisplacement-not-working ) onde o camarada tb utiliza os métodos de Interval, porém acredito que nesse caso deve-se trabalhar somente com o setSmallestDisplacement já que vc quer atualização somente depois de alguns (muitos ou poucos) metros. Quanto ao Service, verifique se utilizar um AlarmManager para chama-lo no background não seria melhor ao invés de deixa-lo rodando e consumindo mais bateria. Na pior das hipóteses o LocationManager passa com atualização baseada em espaço ao invés de tempo, porém a bateria vai embora rápido se for utilizar o GPS. A ultima parte do valor "x" não entendi direito, mas enfim, se for enviar a um servidor Web utilize o Volley, caso contrário pode salvar local em um SQLite ou em um SharedPreferences. Abraço
Responder
Vinícius Thiengo (1) (0)
24/02/2015
Correção: com o LocationRequest rodando realmente o AlarmManager não ajudará, terá de deixar o Service rodando no background mesmo, devido a utilização do listener para isso. Abraço
Responder