sexta-feira, 8 de março de 2013

Mapas


OBSERVAÇÃO: Este tópico descreve a maneira antiga de se rodar mapas em Android, que foi descontinuada pela Google. A maneira correta de se rodar pode ser encontrada aqui.

Segue abaixo o texto original deste tópico.

-----

Olá à todos.

Neste post, será apresentado o conceito de Mapas em Android.

Para que rodemos um aplicativo com mapas em Android, além da criação de seu código-fonte (passo final), precisamos seguir alguns passos básicos, que são: configurar o projeto para o SDK de GoogleAPI's; incluir a biblioteca do Google Maps, e a permissão de Internet do AndroidManifest.xml; obter chave de acesso do Google Maps. Vamos à eles:

Passo 1
Antes de mais nada, precisamos configurar nosso projeto para uma SDK com GoogleAPI. O que isso significa? Significa que precisamos incluir uma SDK que suporte as bibliotecas de mapas do Google. Isso pode ser feito como demonstrado abaixo.


Agora, basta seguirmos os demais passos de criação de um projeto em Android (tal qual visto neste tópico do blogger), e seguirmos os demais passos mostrados abaixo.

Passo 2
Para inserirmos um mapa em uma tela, precisamos incluir o pacote com.google.android.maps.MapView. Este pacote não é padrão em Android. Para importá-lo, precisamos adicionar uma referência à ele no arquivo AndroidManifest.xml. Isto pode ser feito utilizando a tag <uses-library>. Também precisamos dar permissão de Internet à nossa aplicação, usando a tag <uses-permission android:name="android.permission.INTERNET"/>. Estas 2 modificações do arquivo AndroidManifest.xml são demonstradas abaixo.


Passo 3
Agora precisamos obter a chave de acesso ao Google Maps. Para isso, precisamos acessar este site e fornecer o código de certificado digital do seu computador. Tal certificado pode ser obtido com a ajuda do arquivo debug.keystore. A localização deste arquivo varia em cada sistema operacional:

  • Windows XP  C:\Documents and Settings\<seu_usuario>\Local Settings\Application Data\Android\debug.keystore
  • Windows Vista  C:\Users\<seu_usuario>\AppData\Local\Android\debug.keystore
  • Windows 7  C:\Users\<seu_usuario>\.android\debug.keystore
  • OS X e Linux  ~/.android/debug.keystore

A localização de tal arquivo pode ser realizada no Eclipse, através do acesso aos menus Windows  Preferences  Android  Build, tal como mostrado abaixo.


Agora que sabemos onde o arquivo debug.keystore está localizado em nossa máquina, podemos gerar o certificado digital para geração da chave de uso do Google Maps. Tal certificado pode ser obtido através do comando abaixo (para qualquer sistema operacional):

C:\> keytool -v -list -alias androiddebugkey -keystore <local_debug_keystore> -storepass android -keypass android

OBS.: No caso acima, o comando foi digitado para Windows.

Após a digitação deste comando, será gerado um "Certificate fingerprint (MD5)", tal qual mostrado abaixo.


É disto que estávamos precisando!

Agora que temos o certificado (o chamado fingerprint), para obtermos nossa chave precisamos acessar o este site. Se você não tem uma conta no Gmail, será necessário se cadastrar antes. Caso contrário, basta fazer login e digitar esse código no campo "My certificate's MD5 fingerprint:" e pressionar o botão "Generate API Key". Depois de pressionar o botão para gerar a chave do Google Maps, outra tela será apresentada com o resultado, tal qual mostrado abaixo.


No meu caso, a chave válida para o Google Maps é 03NHxysjybHVX2sHs87S1zn4LGQw20BuQ_PuOGQ. Essa é a string que devo usar (em minha máquina) para utilizar a classe com.google.android.maps.MapView.

Para passar esta chamada para nosso aplicativo, podemos utilizá-la de 2 maneiras: via código-fonte Java ou via layout XML:


  • Java  Devemos utilizá-la no evento onCreate() da Activity que extender da classe MapActivity, tal qual mostrado abaixo.


  • XML  Devemos utilizá-la na MapView do nosso arquivo de layout XML, tal qual mostrado abaixo.

Agora podemos começar a mexer no código-fonte da nossa aplicação.


Passo 4
Para criarmos uma tela que utilize mapas, precisamos criar uma Activity filha de com.google.android.maps.MapActivity. Posteriormente, basta criarmos um componente do tipo com.google.android.maps.MapView no evento onCreate() e chamar o método setContentView().

Abaixo são demonstrados o arquivo Java e o arquivo de XML, que juntos possibilitam o uso de mapas em Android. Neste caso específico, a chave da API de mapas foi declarada no arquivo XML de layout.



Assim, o aplicativo gerado mostrará na tela o seguinte resultado:


Acima a API de mapas foi declarada utilizando-se o arquivo de XML. Se ela fosse declarada no arquivo Java, não necessitaríamos do arquivo XML. Logo, o arquivo Java ficaria da seguinte maneira:


Acima o exemplo demonstrado foi o mais básico possível. Abaixo são demonstrados exemplos um pouco mais interessantes, e no próximo tópico deste blogger, exemplos bem robustos.

Um exemplo interessante é centrar o mapa em um ponto específico. Para isto, utilizamos a classe com.google.android.maps.GeoPoint, que representa uma localização através de coordenadas latitude e longitude. Porém, devem utilizar a notação microdegrees. Tal notação se refere a um grau multiplicado por 1E6, que é a mesma coisa que 1.000.000. Tal multiplicação é feita para forçar o valor gerado à ser numérico, sem decimais.

Um bom exemplo de tal funcionalidade é demonstrado abaixo. Nele, uma coordenada é centrada no mapa, e é dado um zoom de fator 15 nesta coordenada. Em Android, os valores de zoom variam de 1 à 21.


O resultado gerado pode ser visualizado abaixo:


-----

Isso é tudo. Agora somos capazes de chamar mapas em nossas aplicações de Android. Existem muitas outras opções de uso de mapas. Porém, elas serão vistas em outros tópicos deste blog.

Caso alguém tenha uma dúvida, crítica ou sugestão, sinta-se à vontade.