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

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog. Você receberá um email de confirmação. Somente depois de confirma-lo é que poderei lhe enviar os conteúdos exclusivos.

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
(5452) (15)
Go-ahead
"Foque em ser produtivo ao invés de ser oculpado."
Tim Ferris
Kotlin Android
Capa do livro Desenvolvedor Kotlin Android - Bibliotecas para o dia a dia
TítuloDesenvolvedor Kotlin Android - Bibliotecas para o dia a dia
CategoriasAndroid, Kotlin
AutorVinícius Thiengo
Edição
Capítulos19
Páginas1035
Acessar Livro
Treinamento Oficial
Android: Prototipagem Profissional de Aplicativos
CursoAndroid: Prototipagem Profissional de Aplicativos
CategoriaAndroid
InstrutorVinícius Thiengo
NívelTodos os níveis
Vídeo aulas186
PlataformaUdemy
Acessar Curso
Receitas Android
Capa do livro Receitas Para Desenvolvedores Android
TítuloReceitas Para Desenvolvedores Android
CategoriaDesenvolvimento Android
AutorVinícius Thiengo
Edição
Ano2017
Capítulos20
Páginas936
Acessar Livro
Código Limpo
Capa do livro Refatorando Para Programas Limpos
TítuloRefatorando Para Programas Limpos
CategoriaEngenharia de Software
AutorVinícius Thiengo
Edição
Ano2017
Capítulos46
Páginas599
Acessar Livro
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Conteúdo Exclusivo
Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
Email inválido

Opa, blz?

Nesse vídeo parte 2 da série de vídeos sobre a Location API no Android mostro como utilizar as entidades LocationRequest e LocationListener para manter o objeto de coordenadas da APP atualizado quanto ao local do usuário, mais precisamente do device. É importante entender o funcionamento dos métodos setInterval() e setFastestInterval() para não se perder quanto as atualizações de coordenadas enviadas ao listener onLocationChanged() (que de vez em quando eu chamo de trigger no vídeo, mas ele é o listener). Fique atento também ao método setPriority() que nos permiti setar qual será a forma prioritária de se utilizar o Fused Provider e não qual é o provider a ser utilizado. Nesse vídeo novamente não consegui ficar dentro dos 8 minutos, mas mesmo assim 14 minutos acredito que ficou em um tempo aceitável. Nessa implementação o update coordenadas está rodando somente com a aplicação aberta, provavelmente no último vídeo da série eu vou postar uma implementação com ele rodando no background com um Service e ResultReceiver (esse último para quando a APP estiver aberta). Sem mais delongas, vou deixar você assistir ao vídeo.

O link para download do projeto se encontra logo abaixo no post.

Segue links das páginas apresentadas no vídeo:

Página de implementação do Location updates no Android

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

Vlw

Receba em primeira mão, e com prioridade, os conteúdos Android exclusivos do Blog.
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 (6)

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