Tutorial Google Maps Android API v2

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 16

Tutorial Google Maps Android API v2

Antes de comear a trabalhar com a API, voc vai precisar baixar a API e obter a chave.
Tanto a API quanto a chave esto disponveis gratuitamente.

Configurando o ambiente
A API do Google Maps disponibilizada pelo Google muito simples de ser utilizada no
ponto de vista de codificao. No entanto, o desenvolvedor pode ter um pouco de
trabalho para configurar um projeto com esta tecnologia.

Nota: Os passos que sero descritos a seguir j


levam em conta que o leitor tenha o ambiente
Android configurado em sua mquina. Caso este
no seja o seu caso, acesse este link
(http://developer.android.com/tools/index.html)
para executar esta tarefa.
Vejamos os passos para se criar um projeto com o Google Maps.

Passo 1: Crie um novo projeto Android (no eclipse ou Android Developer Tool).
o No meu caso meu projeto se chama GooglePlaces e tem o seguinte pacote base:
br.com.googleplaces

Passo 2: Configurar libs (adicionar as bibliotecas Google-play-service e android-


support-v4)
o Google-play-service um projeto biblioteca que fica localizado:

Pasta do SDK Android Extras google google_play_services libproject. Adicione-o


no eclipse como um projeto biblioteca e o vincule ao seu projeto recm criado. Caso
no encontre este projeto siga o link abaixo:

http://developer.android.com/google/play-services/setup.html

Para acrescentar o arquivo android-support-v4, basta adicionar o arquivo que se


encontra na pasta:
o Pasta do SDK Android Extras android support v4 android-support-v4.jar.
o No diretrio libs do seu projeto Android.
Passo 3: Configurar Projeto no Google Console (habilitar servio e obter chave)

Entre no seguinte endereo Web:

https://code.google.com/apis/console/

Logo na entrada ir aparecer uma lista de projetos j configurados caso voc tenha
realizado este procedimento antes. Caso contrrio aparecer uma opo para criar um
novo projeto. Ao acionar esta opo, ser solicitado o nome e o pacote base da
aplicao, aps preencher essas informaes. Clique na opo Services que esta
presente na aba superior a esquerda da tela.
Aps clicar na Aba services, uma lista de APIs disponibilizada pelo Google ser listada
para voc. Devemos agora selecionar as APIs que iremos utilizar em nosso projeto, so
elas: Google Maps Android API V2 e Places API. Habilite estas duas opes, como nas
imagens abaixo:

Agora precisamos criar uma chave de acesso que vincule o nosso projeto com as APIs
que gostaramos de utilizar. No menu superior a esquerda selecione o item API
Access. Procure pelo boto Create New Android Key.
Ao clicar nesta opo aparecer a seguinte tela:

Para criar uma chave de acesso, precisamos informar o SHA1 (informao presente na
keystore) junto com o nome do pacote base da aplicao. Para recuperar o SHA1,
utilize o comando:

keytool -list -v -keystore debug.keystore

Direto no console. Como resultado deste comando receberemos as seguintes


informaes:
Identifique o cdigo SHA1, presente neste emaranhado de informaes. E com este
dado, junto como o pacote base (definido no momento da criao de um projeto
Android no meu caso br.com.lvc.googleplaces) conseguiremos gerar uma chave de
acesso.

No meu caso informei:

36:91:28:DE:8F:ED:96:7C:81:D0:DD:D8:C3:49:2
D:11:53:2E:FF:63;br.com.lvc.googleplaces
E obtive a minha chave de acesso:

AIzaSyBk7On0KxUVi9oa81XX_hUNOI3XE4MNP
kU
Nota: Cada chave esta vinculada a uma Keystore.Logo se utilizar a minha chave sem a
minha keystore seu aplicativo no funcionar corretamente.

Moral da historia: Gere a sua chave a partir do


seu keystore.
Adicionando a API Key em sua aplicao
O passo final adicionar a chave da API para a sua aplicao.

1. Em AndroidManifest.xml, adicione o seguinte elemento como um filho do


elemento application, inserindo-lo antes da tag de fechamento </ application>:
<meta-data android:name=com.google.android.maps.v2.API_KEY
android:value=your_api_key/>

2. Substitua your_api_key Pela sua chave API Key obtida anteriormente.

3. Adicione os seguintes elementos para o seu AndroidManifest.xml.


Substitua com.frameworksystem.android.mapexample com o nome do pacote da sua
aplicao.
<permission android:name=com.example.mapdemo.permission.MAPS_RECEIVE
android:protectionLevel=signature/>
<uses-permission
android:name=com.frameworksystem.android.mapexample.permission.MAPS_RECEI
VE/>

4. Especifique as seguintes permisses


no AndroidManifest.xmlsubstituindo com.frameworksystem.android.mapexample pe
lo pacote da sua aplicao:

<uses-permission android:name=android.permission.INTERNET />


<uses-permission android:name=android.permission.ACCESS_COARSE_LOCATION />
<uses-permission android:name=android.permission.ACCESS_FINE_LOCATION />
<uses-permission android:name=android.permission.ACCESS_NETWORK_STATE />
<uses-permission android:name=android.permission.WRITE_EXTERNAL_STORAGE/>
<uses-permission
android:name=com.google.android.providers.gsf.permission.READ_GSERVICES/>
<permission android:name=br.com.cadastroindustrial.permission.MAPS_RECEIVE
android:protectionLevel=signature/>
<uses-permission
android:name=com.frameworksystem.android.mapexample.permission.MAPS_RECEI
VE/>
<uses-feature
android:glEsVersion=000020000
android:required=true/>
Google Maps

A primeira coisa que nos propomos a entender neste artigo o Google Maps. O
Google nos disponibiliza este componente como um Fragment, mais especificamente
com.google.android.gms.maps.SupportMapFragment.

Logo se criarmos um layout XML, e incluirmos este Fragment nele. Automaticamente


j poderemos fazer uso do Google Maps no nosso aplicativo.

Faa um teste, crie um layout XML e coloque o seguinte cdigo:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<fragment

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent"

class="com.google.android.gms.maps.SupportMapFragment" />

</LinearLayout>

Em seguida vincule este layout com uma Activity.

Repare que estou herdando FragmentActivity e no diretamente de Activity. Voc


conseguiria compilar herdando uma Activity, mas teria um problema na execuo do
projeto caso a Activity no seja a FragmentActivity.

public class MapPuro extends FragmentActivity {

@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_main);
}
}
Ao executar o projeto teremos algo similar ao apresentado na imagem acima. Nota:
Caso voc no consiga o resultado acima, reveja os passos de configurao para ver se
no esta esquecendo nada. Perceba que voc pode dar zoom, e ter acesso a todas as
funcionalidades essenciais do Google maps com um mnimo de cdigo.

Mas ainda h mais coisas para ver. Agora vamos pegar uma referencia do
objeto GoogleMap, para podermos explorarmos mais as possibilidades que esta
tecnologia oferece. Logo abaixo segue uma explanao sobre algumas classes que
devemos saber, antes de prosseguir:

GoogleMap: a classe da API do Android que gerencia o Maps. Atravs dele


conseguimos dar zoom em alguma localizao, atribuir marcadores e definir
configuraes sobre a forma no qual o Map ir se apresentar ao usurio.

LatLng: Representa uma coordenada geogrfica, ou seja uma localizao Latitude e


Longitude.

Logo abaixo segue um exemplo de uso para estas duas estruturas:

private static final LatLng PRACA_TIRADENTES = new LatLng(-19.929762, -43.931773);


SupportMapFragment mapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);

GoogleMap map = mapFragment.getMap();


map.moveCamera(CameraUpdateFactory.newLatLngZoom(PRACA_TIRADENTES, 15));

No cdigo acima, estamos recuperando uma referencia de um objeto GoogleMap. E


estamos falando que ele aponte a cmera para o LatLng representando pela constante
PRACA_TIRADENTES (praa famosa em Belo Horizonte).

Veja que especificamos um grau de zoom para focar a cmera do mapa neste ponto,
no caso foi 15, este grau pode ser de 2 at 21 onde 2 o mais longe e o 21 o mais
prximo possvel.Outra funcionalidade legal que vale a pena ser destacada o
mtodo setMapType tambm presente noGoogleMap.

Este mtodo aguarda uma constante como parmetro, cada constante representa uma
perspectiva diferente de visualizao do mapa. As constantes possveis so:

MAP_TYPE_NONE
MAP_TYPE_NORMAL
MAP_TYPE_SATELLITE
MAP_TYPE_HYBRID
MAP_TYPE_TERRAIN

Nota: Veja um post legal somente sobre este mtodo: (http://android-


er.blogspot.com.br/2012/12/set-map-type-of-googlemap.html). Em carter de teste
coloquei o seguinte parmetro:

map.setMapType(GoogleMap.MAP_TYPE_SATELITTE);
Podemos ver o resultado na imagem abaixo.

Agora que sabemos um pouco mais sobre a API do Google Maps, vamos implementar
uma funcionalidade mais interessante. Como por exemplo, colocar um marcador nossa
prpria localizao atual.
Integrao com GPS

Pra mostrar nossa localizao no mapa primeiro devemos captura-la.

Para fazer isso a estrutura do Android nos disponibiliza duas


classes LocationManager eLocationListener.

Respectivamente o LocationManager possui mtodos que possibilitam o inicio e o fim


das capturas de localizao, e o LocationListener sabe como tratar as localizaes que
foram capturadas.

Nota: No vou falar dos detalhes de como utilizar GPS no Android, para isso voc pode
acompanhar este artigo: http://androiddevbr.wordpress.com/2012/10/21/gps-no-
android/.

O LocationListener na verdade uma interface, e a nossa prpria Activity que exibe o


Map vai implementa-la. Ao implementar esta interface nos vemos forados a
sobrescrever 4 mtodos:

onLocationChanged: Mtodo mais importante, chamado todas as vezes que o sistema


capturar uma localizao.
onProviderDisabled: Toda localizao capturada por um provedor. Esse mtodo
chamado quando um provedor for bloqueado por um cliente.
onProviderEnabled: Esse mtodo chamado quando um provedor for liberado por um
cliente.
onStatusChanged: Este mtodo chamado quando o provedor muda de estado. Os
estados disponveis so:

Fora de servio, Disponvel ou Temporariamente Inacessvel.

Iremos sobrescrever apenas o onLocationChanged.

Basicamente desejamos que toda vez que uma localizao nova for capturada, um
marcador ser colocado no mapa para indicar a mesma. Com o objetivo estabelecido,
devemos agora dar incio a captura das localizaes. Fazemos isso com mtodo abaixo:
private void startCaptureLocation() {

LocationManager locationManager = (LocationManager)


getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
INTERVAL_CAPTURE_IN_MILIS, INTERVAL_PHYSICAL_SPACE_IN_METERS, this);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
INTERVAL_CAPTURE_IN_MILIS, INTERVAL_PHYSICAL_SPACE_IN_METERS, this);
}

Analisando o cdigo acima, podemos perceber que apenas recuperamos uma


referencia doLocationManager, e utilizamos o mtodo requestLocationUpdates do
prprio LocationManager para dar incio ao processo. Este mtodo exige trs
parametros:

Tipo de provedor, como por exemplo GPS.

O intervalo de captura em mili-segundos, ou seja, passou deste perodo de tempo ele


tentara capturar novamente. E o intervalo de captura em metros, ou seja, passou
deste limite em metro ele tentara capturar novamente. Acione este mtodo
no onCreate da Activity, deste modo iremos assegurar que assim que o sistema for
acionado iremos dar incio a captura das localizaes. Faa a sua Activity implementar
a interface LocationListener que passada como parmetro para o incio da captura
de localizaes.

Sobrescreva o mtodo onLocationChanged pelo cdigo abaixo:

@Override

public void onLocationChanged(Location location) {


MarkerOptions markerOptions = new MarkerOptions();
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
markerOptions.position(latLng);
markerOptions.title("Eu");
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.boneco));
map.addMarker(markerOptions);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
}
Veja que criamos uma estrutura chamada MarkerOptions. com esta classe que
iremos indicar de modo grfico um determinado ponto no mapa.

Para criar um MarkerOptions, informamos uma posio(LatLng), no caso uma criada a


partir da localizao recm capturada pelo dispositivo.

Um ttulo(String), ou seja, um texto que ser exibido quando o usurio tocar no ponto
demarcado.

E uma imagem que ir aparecer no mapa no local indicado (neste exemplo meu
boneco de policial).

Nota: Imagem que escolhi pra mostrar minha localizao no


mapa http://icons.iconarchive.com/icons/leo-bridle/people/32/Police-man-icon.png

Aps acrescentar o marker no map, comandamos a cmera para focar na localizao


recm capturada. No final teremos o seguinte resultado:
Com o intuito de economizar recursos do dispositivo, devemos parar de tratar novas
capturas pelaActivity quando a mesma for finalizada.

Fazemos isso sobrescrevendo o mtodo onDestroy pelo cdigo abaixo:

@Override

protected void onDestroy() {


super.onDestroy();
LocationManager locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
locationManager.removeUpdates(this);
}

Este mtodo apenas libera a nossa Activity de tratar novas capturas de localizaes.

Pronto! Agora temos um aplicativo Android que exibe as minhas localizaes mais
recentes no mapa atravs de uma imagem da minha escolha. Voc tambm aprendeu
a configurar este mapa, e a focar a cmera no local que quiser. No final do artigo segue
o cdigo completo da nossa Activity.

At breve.

Nota: Outra referncia legal para esse


assunto: http://www.androidhive.info/2013/08/android-working-with-google-maps-
v2/

Cdigo completo da Activity.

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapPuro extends FragmentActivity implements LocationListener {

public static final long MINUTE = 60000;


public static final long INTERVAL_CAPTURE_IN_MILIS = 2 * MINUTE;
public static final long INTERVAL_PHYSICAL_SPACE_IN_METERS = 100;
private static final LatLng PRACA_TIRADENTES = new LatLng(-19.929762, -
43.931773);
private GoogleMap map;
@Override
protected void onCreate(Bundle arg0) {

super.onCreate(arg0);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);
map = mapFragment.getMap();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(PRACA_TIRADENTES, 15));
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
startCaptureLocation();

private void startCaptureLocation() {

LocationManager locationManager = (LocationManager)


getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
INTERVAL_CAPTURE_IN_MILIS, INTERVAL_PHYSICAL_SPACE_IN_METERS, this);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
INTERVAL_CAPTURE_IN_MILIS, INTERVAL_PHYSICAL_SPACE_IN_METERS, this);

@Override
protected void onDestroy() {
super.onDestroy();
LocationManager locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
MarkerOptions markerOptions = new MarkerOptions();
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
markerOptions.position(latLng);
markerOptions.title("Eu");
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.boneco));
map.addMarker(markerOptions);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
}

@Override
public void onProviderDisabled(String provider) {

@Override
public void onProviderEnabled(String provider) {

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}
Referencia:

http://www.100loop.com/destaque/android-gps-e-google-maps-v2/

http://www.frameworksystem.com/blog/tutorial-google-maps-android-api-v2/

Aconselho Fortemente a assistirem o vdeo de Thiengo Calopsita, ensina tudo


direitinho passo-a-passo:

http://www.thiengo.com.br/google-maps-v2-no-android-inicio-configuracao

Você também pode gostar