Olá, sejam bem vindos!
Está é uma série de vídeos, em formato de curso on-line e com material de apoio disponível para baixar no final do artigo, que mostra como receber a latitude e a longitude, que compõe a coordenada geográfica, referente a localização do dispositivo Android que envia a solicitação aos servidores do Google. São utilizados alguns conceitos de engenharia de sofware, no que diz respeito a parte de projetos, para que exista ambientação das boas práticas por aqueles que buscam a informação aqui contida.
No primeiro, são apresentados o use case, o fluxograma e o diagrama de classes que serão utilizados no decorrer da série.
No use case o usuário solicita a sua posição, latitude e longitude, ao servidor. É possível visualizar o fluxo dos dados por meio do fluxograma, onde a ação inicia ao se solicitar as coordenadas, logo em seguida o sistema verifica se existe a permissão para esse tipo de operação, que é classificada de risco pelo Android, em caso negativo o fluxo é encerrado, se a permissão for positiva, é feita a verificação da condição do Gps do dispositivo, se estiver inativo é informado um Log de erro e o fluxo é encerrado, estando ativo o servidor envia a posição e está é informada para o usuário, finalizando o processo. Para finalizar a parte teórica desta série é apresentado o diagrama de classes que contém somente uma classe denominada receberCoordenadas a qual possue dois atributos base, double latitude e double longitude, e também o método lerCoordenadas().
No segundo, é mostrado como configurar um projeto Android Studio para poder operar em conjunto com o Google Maps API, por meio de uma chave de acesso. O projeto é criado na IDE Android Studio e denominado ReceberCoordenadas, a menor versão do S/O Android é a 3.0. Ele é iniciado com uma activity em branco onde serão acomodados os componentes necessários para que o objetivo final de receber as coordenadas seja alcançado.
A classe ReceberCoordenadas é criada e a primeira ação a ser feita é a aquisição da chave de acesso no Google Maps API, para isso é necessário ter uma conta. Dentro das páginas da API existe uma documentação que informa com detalhes todas as posibilidades de utilização, inclusive com passo a passo. É necessário seguir os passos e criar uma chave de acesso para que se possa dar continuidade ao trabalho. Após a criação os próximos passos são copiar e informar o seu valor no arquivo manifest do projeto como mostrado a seguir.
Dentro do arquivo manifest são necessárias algumas inclusões, começando com as permissões de acesso, elas se dividem em categorias gerais e de risco, isso porque é importante que o usuário do aplicativo tenha noção do tipo de atividade que está sendo executada, principalmente quando se trata da possibilidade de rastreamento. Sendo assim, é solicitada a permissão geral de acesso a internet e as permissões de risco fine_location e coarse_location. Também é necessário a inclusão da chave de acesso a API Google Maps por meio da tag meta-date, dentro da tag aplication. Ela é composta por nome e valor onde o valor é a chave propriamente dita como pode ser visto.
Outro ponto importante a ser visto para que a aplicação possa funcionar corretamente é a compilação do projeto com o serviço do Google chamado de Google Play Services. Para que isso aconteça é necessário que o SDK tenha feito o donwload deste pacote, caso a sua IDE não o possua é necessário providenciar. Feito isto, na guia de estrutura do projeto, em app nas dependências é possível selecionar quais tipos de serviço devem ser compilados junto com o projeto em si. Especificamente, para esse trabalho é necessário o serviço google-play-service-maps que nessa oportunidade se encontra na versão 10.0.1. Após a IDE Android Studio compilar a solicitação do serviço ela está pronta para a sequência dos trabalhos que é a criaçao da tela para acomodar a estrutura necessária para a conclusão do objetivo de receber as coordenadas de localização do dispositivo.
No terceiro vídeo da série, é mostrado a construção da tela que vai comportar o mecanismo da aplicação. Após as configurações para que a IDE Android Studio faça a compilação do serviço de mapas do Google, junto com a aplicação propriamente dita, é necessário a construção da tela com todos os componentes para o correto funcionamento.
A primeira ação a ser executada é modificar o layout da activity de relativo para linear com a orientação vertical. A segunda é, em modo design, inserir um TextView, um Button, outro TextView e um Fragment, nesta ordem. Para o Fragment deve ser selecionado o tipo de serviço que será implementado, neste caso é o SupportMapFragment pois, é nele que será apresentado o google map da aplicação.
É necessário observar que o emulador do Android Studio não suporta mapas por isso, é preciso compilar e rodar o projeto junto a um dispositivo Android conectado ao computador. Para ajudar, este projeto está disponível para donwload com o link do endereço colocado na descrição do vídeo no YouTube e também no blog.
A próxima ação é configurar, em modo text, cada componente da activity. O primeiro TextView com o texto "Receber Coordenadas" e a id titulo, o Button com o texto "Receber Coordenadas" e a id btnReceberCoordenadas, o segundo TextView com o texto em branco pois, é nela que as coordenadas recebidas aparecerão para o usuário e a id receberCoordenadas e finalmente o Fragment com a id mapa.
Sendo assim, o layout da activity está pronto e agora se faz necessário a configuração da classe java para integrá-la. Dentro da classe é necessário declarar, em modo global, os componentes da activity, utilizando de forma padrão o mesmo valor da id para facilitar. Após feita a declaração é necessário integrar a classe ao layout unindo a id do componente junto a variavel global java. Um detalhe importante a ser percebido neste momento é que o fragment mapa não foi declarado, ele será trabalhado em momento oportuno futuramente. A última ação a ser executada nesta parte do processo é ativar o Button criado para que ele receba as operações que compõe o projeto.
Agora o projeto já está configurado para receber o serviço de mapas do Google assim como, a activiry está com o layout pronto e interligado com a classe java.
No quarto vídeo é mostrado como solicitar a permissão do úsuário para que a aplicação possa utilizar os recursos de geolocalização do dispositivo. As permissões são divididas em gerais como a internet por exemplo e de risco como as que possibilitam o rastreamento dos dispositivos, ação essa que pode colocar a vida do usuário em risco se utilizada com intenções criminosas, como um sequestro por exemplo. Por este motivo, os usuários devem ser informados de todas as atividades consideradas de risco pela aplicação e podem permitir ou negar o acesso a essas informaçõe a qualquer momento, ficando a cargo do algoritmo lidar com o fato de que a permissão foi negada.
Para iniciar essa fase serão criadas as variáveis globais, são elas a latitude e a longitude em forma de double e permissão em formato de inteiro. Também será criado o método lerCoordenadas() conforme colocado no diagrama de classes deste projeto. Para o correto funcionamento da aplicação é necessário que a classe ReceberCoordenadas implemente a interface LocationListener para que seja possível a utilização do métodos @overrride nela contidos. Destes métodos somente será utilizado o onLocationChanged() para informar as alterações das coordenadas por tempo ou deslocamento.
A verificação da permissão será feita por meio de um if() onde o ContextCompact compara as solicitadas no arquivo manifest com as que estão garantidas no PackageManager. Caso sejam diferentes será solicitado ao S/O que informe ao usuário da necessidade de utilização deste recurso, lembrando que não é possível interagir nesse processo pois, ele é exclusivo do Android. A classe responsável por esse pedido é a ActivityCompact por meio do método requestPermission() que deve ser carregado com uma string[] contendo todas as permissões de risco registradas no arquivo manifest para que se faça o pedido apenas uma vez tornando a interação com o usuário, nesse detalhe técnico, mais agradável. Uma observação importante é que as permissões de risco são divididas em blocos, ou seja, fine_location e coarse_location tem a mesma função de geolocalização sendo assim, pedindo a permissão para uma automaticamente o S/O autoriza ou nega para as duas.
O próximo passo é a implementação do método @override onRequestPermissionResult() ele solicita o parâmetro requestCode que nada mais é do que a variável permissao. Ao se analisar a documentação do Android verifica-se que este parâmetro deve conter um valor inteiro maior ou igual a zero 0=>.
Na sequência será criado um swtich() com o parâmetro requestCode e o case: com a variável permissao e no nosso exemplo será utilizado apenas um if() para verificar se a permissão foi consedida pelo usuário e em caso positivo vai executar o método lerCoordenadas(). Como agora existe a permissão a aplicação estará liberada para continuar mas, em caso negativo, conforme mencionado anteriormente, o algoritmo deverá tratar essa possibilidade.
Caso existam mais requisições é possível colocá-las, pois estão em um vetor de strings, em um laço for() e executar uma a uma.
No quinto vídeo da série é mostrado como solicitar a latitude e a longitude, formando assim a coordenada geográfica, junto ao servidor do Google. Nesta etapa a primeira ação é a criação de uma variável global do tipo Location denominada location para que se possa receber as coordenadas do servidor Google.
Em seguida, é necessário a criação de uma variável locationManager para receber o serviço de localização e também uma variável boolean para identificar a condição do gps do dispositivo. Caso o gps do dispositivo esteja habilitado é possível continuar, senão é informado um log contendo a string "Gps Desativado". Neste ponto é possível solicitar ao usuário que o ative. Outro detalhe importante é que é possível operar com gps_provider e também com o network_provider, um trata do gps e o outro trata da rede cada um com as suas características, podendo ser utilizados em conjunto. Para este projeto será utilizado somente o gps_provider por se tratar de um exemplo didático.
Agora se faz necessário examinar a condição da variável location, se ela for nula é preciso carregá-la com uma requisição de atualização da posiçao por meio do gps, recebendo assim a última posição conhecida. Se a condição da variável location for diferente de nula, ou seja, contém informação, está será passada para as variáveis latitude e longitude e informada para o usuário no TextView receberCoordenadas.
Para finalizar o método onLocationChanged() informa por meio de um log cada mudança de posição que foi configurada no locationManager.requestLocationUpdate() em seus parâmetros de tempo, que nesse caso é zero, e de deslocamento, que nesse caso também é zero resultando em notificação a cada deslocamento. É importante ficar atento ao detalhe de consumo da bateria pois, em uma configuração como está o consumo é extremamente alto já que o gps fica ativo de forma contínua.
Uma observação importante é que se a verificação da condição da variável location ficar em um if()else o Button terá de ser precionado duas vezes para informar a coordenada. Na primeira ele carrega os valores e somente na segunda é que ela estará diferente de nulo e habilitada a carregar as informações. Sendo assim é necessário que a verificação da condição da variável locatio seja feita em dois if(), caso ela seja nula é carregada e na sequência, como não é mais nula informa a coordenada e se não for nula segue o ciclo normalmente.
No último vídeo é apresentado como se inserir um mapa do GoogleMaps em uma activity Android por meio da tag fragment. Nessa etapa do processo é necessária a criação de uma variável mapFragment do tipo SupportMapFragment e a integração da mesma com o componente fragment que esta acomodado na activity, esta integração é feita por meio do método findFragmentById() e a captura do mapa por meio do método getMapAsync().
Para que a aplicação funcione corretamente é necessário que a classe RecebeCoordenadas também implemente a interface onMapReadyCallBack para que se possa utilizar o método @override onMapReady(). É nesse método que são feitas todas as configurações referentes a apresentação do mapa na tela do usuário como o tipo do mapa, se satélite ou normal por exemplo, quais as ferramentas que estarão disponíveis nesse caso está sendo disponibilizada a barra de ferramentas padrão e também o botão de minha localização.
Este é o principal ponto de todo o contexto apresentado até agora nessa série de vídeos pois, o método lerCoordenadas() executa exatamente a mesma função do botão minha localização com a diferença de que a coordenada nesse caso é conhecida e pode ser manipulada, em um contexto onde se utiliza somente a API do Google essa informação fica no servidor dele. Dependendo da finalidade da aplicação essa informação da coordenada pode ou não ser útil, lembrando que cada aplicação tem 1000 acessos dia gratuitos, caso esse volume seja superado é necessário pagar ou a qualidade do serviço fica comprometida. Por isso é muito importante que se tenha um algoritmo de alto nível muito bem elaborado para não acabar com custos operacionais desnecessários. Todas as possibilidades de configurações dos mapas são abordadas nos tutoriais e na documentação oficial da API.
O próximo passo é a criação de uma variável coordenadas do tipo LatLng para capturar a informação contida nas varáveis globais latitude e longitude. Feito isso, é necessário a criação do marcador que vai apontar as coordenadas no mapa por meio do método MarkerOptions().
E o último passo dessa jornada é a configuração da apresentação das coordenadas no mapa por meio de uma variável update do tipo CameraUpdate que vai proporcionar uma experiência agradável ao usuário ao movimentar o marcador no mapa. Todas as configurações de câmera e de marcação podem ser vistas com maior profundidade na documentação oficial da API GoogleMaps pois, trata-se de um assunto extenso com múltiplas possibilidades de configuração e esse projeto tem uma abordagem mais simples porque se destina a fins de aprendizagem e o contexto principal é como receber as coordenadas dos servidores do Google, fato este que foi concluído com sucesso.
Esse projeto está disponível para donwload aqui.
Para você que nos acompanhou até aqui Muito Obrigado e...
Fica a dica, se gostou de um like e inscreva-se no canal para nos ajudar a continuar trabalhando. Até a próxima.
Nenhum comentário:
Postar um comentário