Busca Por Locais Próximos, Location API Android - Parte 5

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 /Busca Por Locais Próximos, Location API Android - Parte 5

Busca Por Locais Próximos, Location API Android - Parte 5

Vinícius Thiengo
(5850) (11)
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ítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição1ª
Ano2018
Páginas464
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

Opa, blz?

Nesse vídeo mostro uma implementação de um script de busca de locais mais próximos, o core do script é implementado no backend com o PHP e o MySQL (muito mais o MySQL), porém como estamos com o Android sendo o principal cliente dessa feature, uma boa parte do código está no Android para permitir a solicitação dos locais mais próximos e o tratamento da resposta. No vídeo mostro a utilização da classe WeakReference que nos permite ainda utilizar a referencia de nossa Activity, porém não bloqueando o Garbage Collector de destruí-la caso não haja mais referencias fortes a ela. É muito importante que você saiba do problema que pode ter na memória disponível para sua APP se estiver utilizando classes internas que têm o processamento longo dentro de Threads de background, isso evita a remoção do objeto de sua Activity caso não esteja utilizando a inner class da maneira correta e sua APP tenha sofrido algum evento que chamou a reconstrução da Activity (mudança na orientação do device, por exemplo).

O Cálculo utilizado na construção do resultado da busca por locais mais próximos é o mesmo da resposta de Paulo Rodrigues nessa discussão do stackoverflow: Como obter distância dadas as coordenadas usando SQL?

Com esse post finalizo a série do Location API no Android. Sem mais delongas vou deixar você assistir ao vídeo.

Obs. : tente se possível deixar todo o filtro de resultado (não somente no caso de busca por locais) no banco de dados, ele foi construído para também lidar com filtros eficiente mesmo quando muito complexos.

O link para download do projeto, incluindo arquivos PHP, se encontra logo abaixo no post.

Os links dos vídeos anteriores da série estão na sessão "Relacionado" logo abaixo no post.

Segue links de posts que podem lhe ajudar a compreender melhor as entidades sendo utilizadas no vídeo:

Parser JSON no Android, Entendendo e Utilizando

AsyncTask no Android, Acesso a Thread Principal de Forma Otimizada

Para uma melhor compreensão do WeakReference veja esse link: Understanding Weak References

Recomendo também a leitura do livro "Efficient Android Threading" de Anders Goransson que além de muitos assuntos interessantes discutidos no livro tem uma abordagem muito boa sobre WeakReference class.

Vlw

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

Location API no Android, Atualização de Localização - Parte 2Location API no Android, Atualização de Localização - Parte 2Android
Obtendo Endereços Com Geocoder em Location API Android - Parte 3Obtendo Endereços Com Geocoder em Location API Android - Parte 3Android
JobScheduler API no Android, Entendendo e UtilizandoJobScheduler API no Android, Entendendo e UtilizandoAndroid
Tracking Com Location API, JobScheduler e Google Maps V2 no Android - Parte 4Tracking Com Location API, JobScheduler e Google Maps V2 no Android - Parte 4Android

Compartilhar

Comentários Facebook

Comentários Blog (11)

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...
20/09/2015
estou acompanhando o tutorial Location API Android. mas eu sou nova no mundo android e fiquei com duvida:
mas os botões  Buscar coordenadas e Buscar botões de minhas coordenadas ficam desabilitados, se puder me dar uma dica desde ja agradeço
Responder
Vinícius Thiengo (0) (0)
22/09/2015
Solved by you. Great!
Responder
14/08/2015
Complementando minha pergunta, corrijo abaixo os atributos de "name":
  `name` varchar(45) NOT NULL,

Agora funcionou o database.  :-)
Portanto não há mais razão pela pergunta que fiz antes,
A não ser para lembrar a quem for instalar de que é preciso criar a tabela que citei antes, e que não achei no ZIP...  :-)
Responder
Vinícius Thiengo (0) (0)
14/08/2015
Vlw Julio Cesar, vou acrescentar essa tabela. Abraço
Responder
13/08/2015
Olá Thiengo! Elogios à parte (que não faltam ao seu trabalho!) eu não achei no ZIP as configurações para criar a tabela "laa_place" no MySQL.
No arquivo table_database.sql havia apenas o código para a tabela "laa_coordinate", do video anterior...

Me confirme se eu deduzi corretamente que deva ser:

CREATE TABLE `laa_place` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` int(10) unsigned NOT NULL,
  `category` varchar(45) NOT NULL,
  `description` varchar(45) NOT NULL,
  `latitude` varchar(45) NOT NULL,
  `longitude` varchar(45) NOT NULL,
  `status` int(10) NOT NULL,
  `time` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=latin1;

O "AUTO_INCREMENT=73" eu copiei da tabela "laa_coordinate" mas não entendi porque iniciar o auto-increment do id por esse valor, em vez de 1... alguma razão? ;-)

Queria saber também se continuo usando a mesma API_KEY que você utilizou ou devo criar outra? Onde?
Responder
Vinícius Thiengo (0) (0)
14/08/2015
Fala Julio Cesar, blz?
Meu erro. Realmente esqueci dessa tabela e o auto_incremente=73 não importa, pode colocar 1 mesmo, na correria esqueci de setar para 1 novamente. A API_KEY deve ser a sua, mesmo se a do projeto rodar, vc não tem controle sobre essa key, gere a de seu projeto em Console Google (https://console.developers.google.com/project?hl=pt-BR ). Abraço
Responder
14/08/2015
Obrigado pelas dicas e pelo excelente código!!!
Está tudo funcionando muito bem, inclusive o servidor web (web mesmo, e não local) e o MySQL.

Como sugerido por você agora vou implementar os códigos de usuário para rastrear mais de um usuário e, claro, adaptar o conjunto ao meu projeto! Vlw!!!! :-)
Responder
14/08/2015
Olá Vinícius. Substituí a sua API_KEY noservidor web pela minha (em view/index.php) como sugerido e continuo tudo ok. Obrigado!

Uma última dúvida: no mapa do aplicativo (em TrackingActivity) aparece a minha localização e os places.. mas no mapa de monitoramento da web (location-api) aparece apenas a minha localização atual, sem os places cadastrados na mesma tela.
Seria ótimo poder ver os places cadastrados no mapa...

Portanto queria te perguntar:
1) Se for simples e não for muito além dos objetivos da sua aula, como eu poderia implementar isso?
2) Posso além dos places, ver também mais de um usuário no mesmo mapa?

Exemplo: para um grupo de turistas numa excursão poderiamos visualizar os places sugeridos "E" a localização de cada um deles... no aplicativo e na web. :-)
Excelente a sua idéia de fazer uma aplicação prática para a sua aula de Tracking... para mim foi utilíssima!!!    :-)
Responder
Vinícius Thiengo (0) (0)
15/08/2015
Fala Julio Cesar, blz?
É possível sim implementar as funcionalidades que comentou, tanto no Android com o Google Maps V2 (https://developers.google.com/maps/documentation/android/ ) como na Web com o Google Maps Web API (https://developers.google.com/maps/web/ ), essa última é com JavaScript.

Na parte de implementação Web recomendo que estude tb o jQuery (https://jquery.com/ ), pois inevitavelmente vc terá de programar em JavaScript e o jQuery vai deixar as coisas bem mais fáceis, inclusive quando chegar a parte que tiver de utilizar AJAX para pegar dados do servidor web e atualizar o mapa sem o recarregamento de página.

Não sei se tem tempo, mas já li dois bons livros de jQuery, são eles: jQuery - A Biblioteca do Programador JavaScript (http://www.novatec.com.br/livros/jquery3ed/ ) e Ajax com jQuery (http://www.novatec.com.br/livros/ajaxjquery/ ), ambos do Maujor. Esses dois vão lhe dar um conhecimento mt útil de script do lado cliente, Web.

Então é isso, como falei, todas as funcionalidades que citou é possível, pois na verdade o que vai fazer é apresentar os dados no mapa apenas, mesmo que mais de um, o core mesmo será a lógica para obter as coordenadas e atualizar as interfaces Web e mobile, isso com um servidor Web / banco de dados responsivo. Até queria poder lhe ajudar com algumas partes no dev, mas como vc sabe, a Thread aqui tb está cheia, mas se surgirem dúvidas pode entrar em contato. Abraço
Responder
Vinícius Thiengo (0) (0)
15/08/2015
Ops, antes que esqueça, se for comprar os livros, utilizando o código THIENGO vc obtém 20% de desconto, mas veja se não consegue ainda mais barato em outros lugares (Buscapé, por exemplo). Abraço
Responder
16/08/2015
Olá Vinícius!  
Valeu demais as dicas e as sugestões dos 2 livros de JQuery. Vou comprar sim e aproveitar o seu código de desconto!  :-) Vou estudar rápido porque eu já preciso logo desses conhecimentos!  :-)
Vale muito a gente ter a orientação do rumo correto! Valeu mesmo!!!  :-)

Ah... seguindo suas dicas localizei uma página que gostei muito com exemplos de "markers" no Maps, em Javascript para a API web, no Google Developers, que eu aproveito para compartilhar com seus leitores também:
https://developers.google.com/maps/documentation/javascript/examples/

Grande abraço!!! Obrigado!!!  :-)
Responder