Tutorial: Introdução – API Google Maps v2 Android

On 3 de outubro de 2013 by Jeferson

bannerv2

Com a API do google maps v2 para Android, você pode adicionar mapas com base em dados do Google Maps para a sua aplicação. A API lida automaticamente com acesso aos servidores do Google Maps,  download de dados, visualização do mapa, e resposta a gestos no mapa. Você também pode usar os métodos da API para adicionar marcadores, polígonos, sobreposições, e ainda mudar a visão de uma área do mapa. Esses objetos ajudam a fornecer informações adicionais para os locais, e permite a interação do usuário com o mapa.

A seguir, apresentarei os passos para você criar sua primeira aplicação utilizando o básico destes recursos. Para isso,abra o adt-bundle e vamos ao trabalho.

O Google Maps API Android V2 é distribuído como parte do Google Play services SDK. Selecione no menu do ecplise Window > Android SDK Manager > Extras> Google Play Services, e instale-o.

SDK

Crie um novo projeto com o nome de Mapa_simples.
Após instalado o Google play services, copie a biblioteca, ela fica dentro da pasta : sdk\extras\google\google_play_services\libproject\google-play-services_lib para a pasta onde você criou seu projeto android;
Usando o adt, importe o projeto de biblioteca em sua workspace. Clique em File> Import, selecione Android > Existing Android Code into Workspace  e vá para a cópia do projeto de biblioteca Google Play Service para importá-lo;
Vá em Properties do seu projeto (Clique com o botão direito no seu projeto) e selecione o menu “Android“;
Clique no botão [Add…] e na caixa de diálogo “Project Selection” selecione o projeto google-play-services-lib que foi importado anteriormente;
lib
O Google Maps API v2 Android usa um novo sistema de gerenciamento de chaves. Chaves existentes de um aplicativo Android Google Maps v1 não vão funcionar com a API v2. Para obter uma chave para a sua aplicação requer várias etapas. Estes passos são descritos a seguir:
* Recuperar informações sobre o certificado de sua aplicação (SHA-1 fingerprint).
A chave do Google Maps API é baseada em um pequeno formulário de certificado digital do seu aplicativo, conhecido como SHA-1 fingerprint. A fingerprint é uma seqüência de texto único, gerado a partir do algoritmo comumente usado SHA-1 hashing. Porque a fingerprint é única, o Google Maps pode usa-lo como uma forma de identificar a sua aplicação.
Por padrão, ele é armazenado no mesmo diretório do seu dispositivo AVD:
Usando o Eclipse selcione Window > Preferences> Android > Build  para verificar o caminho completo (Default debug keystore);
Usando o Terminal do windows (cmd) navegue até a pasta bin do jdk da sua máquina para ter acesso aos comandos Keytool, no meu caso utilizando o windows (C:\Program Files\Java\jre7\bin)
*Execute a seguinte linha de comando subistituindo o caminho do arquivo debug.keystore pelo seu visualizado anteriormente:
keytool -list -v -keystore “C:\Users\”USER”\.android\debug.keystore” -alias androiddebugkey -storepass android -keypass android

Você deverá ver uma saída semelhante a esta e dentre as informações você já pode ver seu SHA-1 fingerprint

out

*O proximo passo é registrar sua SHA-1, acesse o site da API do google https://code.google.com/apis/console/Logado com uma conta;

No lado esquerdo da página, temos um combo com os nossos projetos. Ao selecionar um deles podemos clicar em Services. Entre as dezenas de serviços temos o Google Maps Android API v2, que deve ser mudado para o estado on.

on

A seguir clicque no link API Access, também no lado esquerdo. Na extremidade inferior desta página temos um link “Create nem android key”. Na caixa de texto apresentada deve-se colocar o SHA1 de seu certificado, seguido do nome do pacote da sua aplicação Android que deverá interagir com os serviços Google.

androidk

O proximo passo é adicionar a chave da API para a sua aplicação.
No AndroidManifest.xml, adicione dentro de <application>, inserindo  antes da tag de fechamento </ application>:
<meta-data android:name=”com.google.android.maps.v2.API_KEY” android:value=”your_api_key”/>
Exemplo :
<application
android:allowBackup=”true”
android:icon=”@drawable/icon”
android:label=”@string/app_name”
android:theme=”@android:style/Theme.NoTitleBar” >
 <meta-data
 android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

<meta-data
android:name=”com.google.android.maps.v2.API_KEY”
android:value=”your_api_key” />

 </application>
Adicione as seguintes alterações também no seu manifest
<permission
        android:name="<SEU_PACOTE>.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

<uses-permission android:name="<SEU_PACOTE>.
permission.MAPS_RECEIVE" />
<uses-permission android:name=
"android.permission.INTERNET" />
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name=
"android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name=
"com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name=
"android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name=
"android.permission.ACCESS_FINE_LOCATION" />


<uses-feature
   android:glEsVersion="0x00020000"
   android:required="true"/>
<application
 android:allowBackup="true"
 android:icon="@drawable/icon"
 android:label="@string/app_name"
 android:theme="@android:style/Theme.NoTitleBar" >
        
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="your_api_key" />
...

No arquivo .xml referente ao mapa altere para :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapActivity" >

      <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment"  />
</RelativeLayout>

E por fim a sua activity deve ficar assim : 

public class MapActivity extends Activity {
    private LatLng frameworkSystemLocation = new LatLng(-20.397833,-43.50906);
    private GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
        .getMap();
        //Adiciona um ponto no mapa no local pré determinado 
        Marker frameworkSystem = map.addMarker(new MarkerOptions()
       .position(frameworkSystemLocation).title("Framework System"));
        // Move a câmera para Framework System com zoom 15.
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(frameworkSystemLocation , 15));
        map.animateCamera(CameraUpdateFactory.zoomTo(17), 2000, null);
        //Marca sua posição no mapa
        map.getUiSettings().setMyLocationButtonEnabled(true);
        map.getUiSettings().setCompassEnabled(true); 
        map.setMyLocationEnabled(true);  

}

mapa

REFERENCES

https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api

Summary
Tutorial: Introdução - API Google Maps v2 Android
Article Name
Tutorial: Introdução - API Google Maps v2 Android
Description
Tutorial: Introdução - API Google Maps v2 Android
Author
Publisher Name
iMobilis
Publisher Logo

15 Responses to “Tutorial: Introdução – API Google Maps v2 Android”

  • Tutorial muito bom, bem explicado. Porém no meu código o trecho (MapFragment), onde tem map = ((MapFragment)… está dando o seguinte erro: MapFragment cannot be resolved to a variable, ou seja não pode ser resolvido de uma variável. Fiquei sem entender e sem saber o que fazer, se vocês puderem me esclarecer, fico agradecido.

    • Me desculpe a demora para responder, houve uma atualização da api após a criação do tutorial, e agora é necessário adicionar os seguintes passos para funcionar corretamente:
      class=”com.google.android.gms.maps.MapFragment” no fragment do xml e o seguinte metada no aplication do manifest.
      meta-data android:name=”com.google.android.gms.version” android:value=”@integer/google_play_services_version” /
      O tutorial, está atualizado, em caso de qualquer dúvida.

  • Voce fez esse tutorial ou só copiou ? Voce escreveu o codigo e testou ? Por que já segui uns 10 tutoriais e nada funciona. No meu sempre da erro no <fragment

    android.view.inflateexception

    • Me desculpe a demora para responder. Sim o código foi testado e utilizado em diversos aplicativos, o problema é que houve uma atualização da api após a criação do tutorial, e agora é necessário adicionar os seguintes passos para funcionar corretamente:
      class=”com.google.android.gms.maps.MapFragment” no fragment do xml e o seguinte metada no aplication do manifest.
      meta-data android:name=”com.google.android.gms.version” android:value=”@integer/google_play_services_version” /
      O tutorial, está atualizado, em caso de qualquer dúvida.

  • Fala Jeferson,

    Ótimo tutorial, de todos que segui o seu foi o primeiro que funcionou corretamente.

    Porém fiquei com uma dúvida, na linha que vc definiu o titulo do marker:

    .position(frameworkSystemLocation).title(“Framework System”));

    E se eu quiser adicionar uma descrição, como por exemplo o endereço do local, tem como?!

    abraços,
    Leonardo

  • Olá,
    Já segui passo a passo várias vezes e continua sem reconhecer o comando getFragmentManager() , já inclui

    class=”com.google.android.gms.maps.MapFragment” no fragment do xml e o seguinte metada no aplication do manifest.
    meta-data android:name=”com.google.android.gms.version” android:value=”@integer/google_play_services_version” /
    e continua sem reconhece.
    Grato,
    Rafael

    • Você tem que deixar estas declarações dentro da tag

    • tag application

    • Experimente fazer um import:

      import com.google.android.gms.maps.MapFragment;

    • Possíveis soluções para este problema são:

      – Tente atualizar o google play services no sdk manager. (Após atualizar, lembre de importar a versão atualizada)
      – Mude o compilador da aplicação para Google api
      em >> botão direito>>Propert>>Android >> escolha Google apis com api level 17 ou 19.
      – Na activity do map import
      com.google.android.gms.maps.MapFragment.
      – Não se esqueça de adicionar o meta data
      meta-data android:name=”com.google.android.gms.version” android:value=”@integer/google_play_services_version” /
      No Manifest, dentro da tag aplication

  • Olá, eu estou com mesmo erro, já fiz o que foi dito e nada, ele apresenta o seguinte erro no MapFragment: MapFragment cannot be resolved to a variable.

    • Possíveis soluções para este problema são:

      – Tente atualizar o google play services no sdk manager. (Após atualizar, lembre de importar a versão atualizada)
      – Mude o compilador da aplicação para Google api
      em >> botão direito>>Propert>>Android >> escolha Google apis com api level 17 ou 19.
      – Na activity do map import
      com.google.android.gms.maps.MapFragment.
      – Não se esqueça de adicionar o meta data
      meta-data android:name=”com.google.android.gms.version” android:value=”@integer/google_play_services_version” /
      No Manifest, dentro da tag aplication

  • Muito legal. Funcionou. Mas não consegui achar ainda em lugar algum como coletar as informações e levar para outro layout.
    Por exemplo: Quero levar apenas a distância de ponto a ponto, para fazer cálculo em outra class depois.
    Abraços,

    • Não sei se entendi bem sua dúvida, mas se o problema é enviar seus dados entre a activity do mapa e uma outra activity você pode usar os extras da intent. Como por exemplo:
      No Mapa:
      Intent intent = new Intent(this, SegundaActivity.class);
      intent.putExtra(“TAG”, “Informacao_que_eu quero_enviar”);
      Para receber na segunda activity:
      Intent intent = getIntent();
      String informacao = intent.getStringExtra(“TAG”);
      Aqui usei string, mas outros tipos podem ser usados.

  • Boa Noite Senhores….Alguém de vocês pode me ajudar quero fazer com que o usuário crie pontos no mapa sei que utiliza-se o método setOnMarkerClickListener ou setOnMapLongClickListener mas estou com dificuldade de desenvolver isso vcs podem me ajuda com alguma dica……desde já agradeço abrçç

Deixe um comentário

O seu endereço de e-mail não será publicado.