Em se
tratando do Google, uma empresa que dispensa comentários e vem se tornando uma
das maiores do mundo no seu ramo de negócio, sempre nos disponibilizou
inovações tecnológicas e de ponta. Um dos recursos que podemos englobar no
desenvolvimento para Android seria o uso das denominadas “APIs” (Application
Programming Interface ou Interface de Programação de Aplicativos), em poucas
palavras, uma “API” seria a forma que temos de nos comunicar com as funções
pré-programadas pelo fabricante, no nosso caso o Google. Neste artigo abordarei
a “API” do “Google Maps”, sendo que a mesma nos permite a criação de mapas com
locais definidos, diversos tipos de controle como o de Zoom, tipos de mapas,
geração de rotas, implementação de pesquisas, entre outras coisas.
Trabalharemos com a versão 1.0, mas é
importante salientar que o próprio Google já disponibilizou outras versões com
algumas funcionalidades a mais que discutiremos em artigos futuros. Reforçando,
este artigo irá abranger todas as etapas desde a obtenção, cadastro e acesso da
versão 1.0 (que por sinal está muito estável) , ou seja, este artigo não
servirá de base para versões superiores desta API.
Antes de
começarmos a programar, teremos que passar por um processo um tanto burocrático
e chato. Todo acesso ao servidor do Google exige uma Identificação (uma chave
única de acesso) para evitar múltiplos acessos desnecessários. Para obtermos
esta chave devemos informar outra chave presente em nossa aplicação Android, denominada
chave de Debug. Em seguida descreverei detalhadamente estas duas etapas.
1-) Obtendo o
certificado digital MD5
Ao executar
algum projeto desenvolvido no emulador do Eclipse a chave de debug deverá ser
encontrada por padrão no diretório:
-
Windows
Seven: C:\Users\
<user>\.android\debug.keystore
-
Windows XP: C:\Documents
and Settings\
<user>\.android\debug.keystore
<user>
deverá ser entendido como a pasta do usuário. Caso não encontre neste diretório
recomendo conferir no Eclipse clicando no item de Menu
“Window/Preferences/Android/Build” e na opção “Default Debug Keystore” poderá
conferir o diretório em questão. Ver Imagem 01 para maiores detalhes.
Figura
01: Diretório Padrão “debug.keystore”.
A próxima etapa executaremos o comando
“KeyTool” no ”prompt” do DOS para descobrir o que desejamos, o certificado MD5.
É neste exato momento que usaremos o diretório padrão descoberto anteriormente.
O comando “KeyTool” é um programa instalado junto ao JDK. Para isto execute a
linha de código no diretório Bin do Java, Veja a seguir:
C:\Arquivos
de Programas\java\jdk1.7.0_01\bin>keytool –list -v -keystore
C:\Users\Thiago\.android\debug.keystore
Caso necessite informar alguma senha
de armazenamento de chaves deixe em branco pressionando “Enter”. Aparecerá uma
mensagem informativa e logo em seguida diversos tipos de certificados. Localize
a linha “(MD5 do certificado)” e anote esta seqüência alfanumérica de 47
caracteres.
Trecho da listagem
mais importante:
*****************
Advertência **********************
Fingerprints
do certificado:
MD5:
11:04:EC:BE:C9:72:DC:B2:3D:B3:25:AA:BB:CC:DD:EE
****************************************************
Este certificado digital é único,
ressaltando que cada desenvolvedor deverá possuir o seu.
2-) Obtendo a chave
de registro da API “Google Maps”
Primeiramente
é necessário ter um usuário e senha no Google para obtermos a chave de
registro. Segue o link para acesso
O próprio site
nos informa a existência de outras versões da API, mas neste caso estaremos
utilizando a versão 1.0 sendo necessário seguir os passos adiante. Leia
atentamente os termos e condições de uso marcando a opção “I have read and agree with the terms and conditions” para
aceitar os termos determinados. Na opção “My
certificate's MD5 fingerprint”
insira o certificado MD5 obtido anteriormente
e para finalizar esta etapa clique no botão “Generate API Key”. Ver Imagem 03.
Figura
03: Gerando a Chave de
registro da API “Google Maps”.
Na próxima
tela teremos uma mensagem informativa indicando a chave válida para todos os
aplicativos assinados com o certificado digital MD5 e um exemplo de uso no em
um layout XML. Esta chave deverá possuir 40 caracteres alfanuméricos.
Conhecendo as Classes
1-) com.google.android.maps.MapActivity
MapActivity é a classe base da API Google, possui o código
para gerenciar as necessidades de qualquer atividade que apresenta um “MapView”
incluindo o gerenciamento do ciclo de atividades do aplicativo como:
OnCreate(), OnResume(), OnPause() e OnDestroy().
2-) com.google.android.maps.GeoPoint
Uma classe imutável representando um par de latitude e
longitude, armazenados como números inteiros. Os principais métodos são:
getLatitudeE6() e o getLongitudeE6() que retornam a latitude e Longitude deste “GeoPoint”
em “microdegrees” (graus * 1E6).
A notação “microdegrees” se refere a um grau multiplicado
por 1E6 e apenas numérico, sem decimais. O número 1E6 é a mesma coisa que
1.000.000, onde o 6 significa que existem 6 zeros à esquerda.
Exemplo de conversão:
int latitude = (int) (latitude*1E6);
3-) com.google.android.maps.MapController
Esta
classe disponibiliza recursos para controlar a navegação pelo mapa, além do
controle de detalhamento. Os principais métodos são: ZoomIn() e ZomOut()
Servindo para aumentar e diminuir a visualização da área centralizada no mapa,
setZoom(int level) para indicar o nível de detalhe de visualização do mapa e o
setCenter(Geopoint point) centraliza a visualização do mapa na coordenada
informada.
4-) com.google.android.maps.MapView
A Classe MapView encapsula todo o
código necessário para realizar a comunicação com o GoogleMaps, por este motivo
que esta classe recebe como parâmetro no seu construtor a chave de licença para
utilização do serviço, sendo seus principais métodos o getController() que retorna
um objeto MapController permitindo executar controle de zoom e navegação pelo
mapa e setBuiltInZoomControls() recebe um valor
booleano para habillitar/desabilitar controles de zoom clicando no mapa.
Criando um exemplo Prático
Depois de entendermos algumas das principais
classes, iremos por a mão na massa criando um exemplo para carregar o Mapa do
Google e alterar suas coordenadas pela latitude e longitude nos mostrando o
lugar de destino. Antes de tudo, para trabalhar com a API do Google Maps é
necessário possuir instalado o pacote “Google Play Services” localizado na aba
“Extras” e “Google Api” na aba da versão do Android em questão (Para este
exemplo foi usado a versão 2.2). Para executar esta tarefa abra o “Android SDK
Manager” fazendo a instalação destes pacotes. Ver Imagem 05.
Figura
05: Instalação dos Pacotes.
Faremos um pouco diferente dos outros
artigos, usaremos a biblioteca “Google Api”, instalado anteriormente, os passos
são os mesmos, alterando apenas este detalhe. Clique em “File/New/Android
Project” preenchendo com as seguintes configurações:
Em “Project name” defina como: “Google_api_v1”,
logo em seguida em “Contents” marque
o item “Create new Project in workspace”.
Utilizamos a plataforma 2.2 deixando como padrão o Build Target como “Google APIs”. Nas propriedades defina
um nome para aplicação em “Application
Name” como “Google_api_v1” e para o pacote como “pct.Google_api_v1”. Marque o item “Create Activity” e em “Min
SDK Version” use a versão 8. Clique em “Finish”
para encerrar esta etapa, Ver Imagem 06.
Figura
06: Configurações Iniciais.
Alterando o arquivo “AndroidManifest”
No caso do “Google Maps”, deveremos
dar permissão ao aplicativo para acesso a internet usando a tag
“uses-permission” e acesso a biblioteca com a “uses library”. Estas configurações
serão realizadas dentro do arquivo de configuração “AndroidManifest.xml”.
Para Permissão
de acesso a internet:
<uses-permission
android:name="android.permission.INTERNET" />
Para
permitir acesso a biblioteca do Google Maps:
<uses-library android:name="com.google.android.maps"
/>
Segue em
seguida a listagem completa:
<?xml
version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="pct.Google_maps"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET"
/>
<uses-sdk android:minSdkVersion="8"
/>
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<uses-library android:name="com.google.android.maps"
/>
<activity android:name=".Google_mapsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
</manifest>
Criando o lay-Out
A tela deverá possuir 2 TextViews, 2 EditTexts, 1 Button e 1 MapView
dispostos na tela. Ver Imagem 07.
Figura 07: Lay-Out de exemplo.
O XML Correspondente:
<?xml
version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<LinearLayout android:id="@+id/linearLayout4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<LinearLayout android:id="@+id/linearLayout3"
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="168dp">
<TextView android:layout_width="wrap_content"
android:text="Latitude:"
android:layout_height="wrap_content"
android:id="@+id/txtLatitude">
</TextView>
<EditText android:layout_width="150dp"
android:id="@+id/edtLatitude"
android:layout_height="wrap_content">
</EditText>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout1"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:text="Longitude:"
android:layout_height="wrap_content"
android:id="@+id/txtLongitude">
</TextView>
<EditText android:layout_width="150dp"
android:id="@+id/edtLongitude"
android:layout_height="wrap_content">
</EditText>
</LinearLayout>
</LinearLayout>
<Button android:text="Localizar"
android:id="@+id/btnLocalizar"
android:layout_width="116dp"
android:gravity="center"
android:layout_gravity="center"
android:layout_height="35dp"
android:onClick="Localizar">
</Button>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="0AOvUFOH7B4e1mBLmq1cEkgCMwk_AABBC_CDDEE"/>
</LinearLayout>
A parte que devemos dar uma ênfase
maior seria o local onde inserimos a chave da Api obtida anteriormente passando
o valor através da tag “apiKey”, confira abaixo:
android:apiKey="0AOvUFOH7B4e1mBLmq1cEkgCMwk_AABBC_CDDEE"
Codificando o exemplo
Explicarei detalhadamente todas as etapas
efetuadas, sendo que o primeiro passo seria importar as bibliotecas
necessárias.
import
android.os.Bundle;
import
android.view.View;
import
android.widget.EditText;
import
com.google.android.maps.GeoPoint;
import
com.google.android.maps.MapActivity;
import
com.google.android.maps.MapController;
import
com.google.android.maps.MapView;
public class
Google_mapsActivity extends MapActivity
{
private GeoPoint ponto;
private MapView mapView;
private EditText edtLatitude, edtLongitude;
A classe
principal herdará da MapActivity utilizando a cláusula “extends”. A variável
“ponto” controlará as coordenadas do mapa, a “mapView” encapsula todo o código
necessário para realizar a comunicação com o GoogleMaps usando o método
GetController(). Já o “edtLatitude” e “edtLongitude” para trabalharmos com os
valores de latitude e longitude.
@Override
public void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InicializaListeners();
mapView.setBuiltInZoomControls(true);
}
No
evento OnCreate() executaremos o método “InicializaListeners” para atribuir as
variáveis utilizadas ao decorrer do aplicativo e passamos um valor “true” no
método “setBuildZoomControls()”. Este responsável por habilitar o controle de
Zoom ao clicar em qualquer lugar do mapa.
public void
InicializaListeners()
{
mapView
= (MapView) findViewById(R.id.mapview);
edtLatitude
= (EditText) findViewById(R.id.edtLatitude);
edtLongitude = (EditText)
findViewById(R.id.edtLongitude);
}
Inicialização
das variáveis atribuídas pelo “id” dos componentes.
public void
Localizar(View v)
{
double latitude = Double.parseDouble(edtLatitude.getText().toString());
double longitude = Double.parseDouble(edtLongitude.getText().toString());
ponto = new
GeoPoint((int)(latitude * 1e6), (int)(longitude * 1e6));
MapController
mControler = mapView.getController();
mControler.animateTo(ponto);
}
O
método Localizar() está fazendo referência ao botão criado anteriormente, sendo
que o mesmo irá obter os valores da latitude e longitude, usando uma variável
do tipo “GeoPoint()” realizando as transformações necessárias. Para aplicar as
localizações usaremos um objeto do tipo “MapController”.
@Override
protected boolean
isRouteDisplayed()
{
return false;
}
Finalmente
temos o método sobrescrito “isRouteDisplayed()” que retorna um booleano para
informar se algum tipo de rota está sendo visualizada. Este método é
obrigatório em se tratando da classe “MapActivity”.
}
Podemos conferir o exemplo em “Run-Time” na Imagem
08.
Figura 08: Exemplo Localizando pela Latitude e Longitude.
Ao clicar sobre o mapa temos o controle de Zoom
para (+) ou para (-). Ver Imagem 09.
Figura 09: Controle
de Zoom.
Conclusões
No desenvolvimento
para o Sistema Android podemos integrar muitas funcionalidades interessantes,
como por exemplo o uso desta API do Google Maps. Procurei neste artigo explorar
todas as etapas para implementar os recursos desta poderosa API criada pelo
Google. Estes mecanismos estão cada vez mais presentes nos softwares atuais de
dispositivos móveis, abrindo um leque de possibilidades ao desenvolvedor Móbile
e também Web. Fica aí a dica meus amigos, um abraço e até o mês que vem!
Referências
Nenhum comentário:
Postar um comentário