Google Maps V2 no Android, Inicio e Configuração

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Google Maps V2 no Android, Inicio e Configuração

Google Maps V2 no Android, Inicio e Configuração

Vinícius Thiengo
(10674) (38)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloCraftsmanship Limpo: Disciplinas, Padrões e ética
CategoriaDesenvolvimento Web
Autor(es)Robert C. Martin
EditoraAlta Books
Edição
Ano2023
Páginas416
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa! Blz?

Nesse vídeo mostro como instalar e utilizar a lib Google Maps V2 que dá suporte a funcionalidades de Mapa no Android. Muito comum em aplicativos Web e Mobile o maps do Google é bem tranquilo quanto a utilização na plataforma mobile, as funcionalidades vem quase todas prontas (desenho de caminho no mapa, obtenção de distância entre pontos, ...). Note que esse vídeo faz parte de uma série de vídeos sobre o Google Maps V2 e por sinal esse é o primeiro vídeo onde apresento como instalar e realizar as configurações iniciais para ter o Mapa rodando perfeitamente em nossa APP. Fique atento na configuração do AndroidManifest.xml, pois caso ela não esteja correta em sua APP o maps não funcionará e Exceptions serão geradas. Fique atento também quanto a criação da API KEY no Console de desenvolvedores do Google. No vídeo mostro as duas maneiras de adicionar o mapa no layout da Activity, mas por permitir a alteração de conteúdo dinâmicamente, recomendo que você foque apenas na segunda versão que apresento, onde coloco o mapa utilizando a API do Android e não o XML. Então é isso, acho que não tem muito o que falar, pois esse é um vídeo inicial de configuração e simples exemplo de um mapa rodando na APP.

Note que utilizeo um emulador Genymotion com o Google Play Services instalado e rodando a versão 4.3 do Android, você precisará de um dispositivo ou emulador com o Google Play Services para rodar o maps, se não conseguir instalar o Google Play Services no Genymotion basta utilizar um dispositivo real.

O link do projeto está logo abaixo no post para download.

Página da entidade SupportMapFragment no site oficial do Android

ERRATA: Se vc está seguindo os passos e houver erros ainda, adicione as seguintes permissões:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Bug reportado por: Diego Melo e Carlos Galves

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Upload de Vídeo e YouTubeIntents com YouTube API no AndroidUpload de Vídeo e YouTubeIntents com YouTube API no AndroidAndroid
Parser JSON no Android, Entendendo e UtilizandoParser JSON no Android, Entendendo e UtilizandoAndroid
Navigator Drawer na ActionBar Android, Entendendo e UtilizandoNavigator Drawer na ActionBar Android, Entendendo e UtilizandoAndroid
Parser RSS / Atom com a lib Rome no AndroidParser RSS / Atom com a lib Rome no AndroidAndroid

Compartilhar

Comentários Facebook

Comentários Blog (38)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
07/04/2018
Bom dia Thiengo,
Fiz um aplicativo para logar com a conta do google e trazer nome, email e foto da conta, porém quando tento gerar o apk, o botão de entrar com o google para de funcionar, na hora que clico para entrar ao mesmo tempo que ele entra ele sai, já se eu instalar pelo o usb funciona corretamente. Será que pode me ajudar para resolver isto.
Responder
Vinícius Thiengo (0) (0)
13/04/2018
Aline, tudo bem?

Note que as APIs de login tendem a solicitar que nós developers criemos uma chave de API para o ambiente de desenvolvimento (instalação via USB) e uma chave de API para ambiente de produção (instalação via APK na Play Store).

Este pode ser o seu problema: estar utilizando a mesma chave de API de ambiente de desenvolvimento para também o ambiente de produção.

Mas nem mesmo coloquei o app na Play Store ainda?!

Certo, mas somente de ter assinado o app com o .keystore gerado para ele faz com que você não mais esteja com um APK de app de ambiente de desenvolvimento, a assinatura de debug não mais está sendo utilizada.

De qualquer forma, é preciso que você simule o erro com o USB conectado, assim poderá ver nos logs do Android Studio a pilha de erro e então ter certeza do que realmente está parando o app.

Caso não conheça os logs do Android Studio, estude por completo o conteúdo a seguir:

https://developer.android.com/studio/debug/am-logcat.html?hl=pt-br

Sobre o algoritmo de login com conta do Google, tenho um conteúdo onde falo sobre está API, porém no contexto do Firebase.

Recomendo que veja o conteúdo, até o ponto onde começo a integração com o Firebase Login, pois neste ponto não terá mais algo útil a ti:

https://www.thiengo.com.br/google-signin-api-firebase-android-parte-6

Abraço.
Responder
12/12/2016
Olá Thiengo, como sempre salvando com suas vídeos aulas.
Minha dúvida hoje vai um pouco além dessa aula.
Criei um mapa personalizado no my maps, peguei a chave key=API_KEY, qual seria o procedimento para criar o app com esse mapa personalizado.
Alguma coisa mais simples do tipo clicou no app ele abre esse mapa personalizado, comunicando com minha api, pois no mapa eu posso alterar, incluir ou excluir os dados sem precisar ficar exportando toda vez um apk novo.
Obrigado
Responder
Vinícius Thiengo (0) (0)
12/12/2016
Leo, tudo bem?

No caso você quer já apresentar um mapa sem ter conteúdo dinâmico, digo, sem ter marcadores podendo ser deslocados nele pelo código Android, certo?

Se sim, você pode tentar: obtendo o iframe dele pela página do My Maps e então carregando pelo WebView. Não esqueça da permissão de Internet no aplicativo.

Veja se assim fica aceitável em sua APP. Abraço.
Responder
12/12/2016
Sim daria sem dúvida nenhuma para fazer via WebView só que não fica tão bom né kkk
A ideia era um mapa personalizado, mostrando pontos de marcação por exemplo: restaurante de comida mineira, somente isso entendeu.
Desde já agradeço muito pela ajuda e principalmente pelos tutoriais.
Grande abraço.
Responder
Danilo (1) (0)
29/09/2015
Boa Noite Thiengo. Consegui implementar o mapa, sem problemas. Agora queria colocá-lo em duas situações: uma é numa Activity de detalhes dentro de um collapse bar(não sei se o componente se chama assim mesmo). É aquele que reduz o tamanho da tool bar a medida que rolar o scroll. Problema que minha classe de detalhe herda de AppCompatActivity e o map tem que ser gerado em fragment. Como faço para inflar o mapa dentro dessa activity, já que não posso herdar de duas superclasses? Na outra situação, a qual já consigo mostrar o mapa, estou tentando plotar vários markers, vindo de um arraylist de objetos com latitude e longitude. Qual seria a melhor maneira de implementar? Estou tentado algumas formas, mas sem sucesso.. Abraço e obrigado.
Responder
Vinícius Thiengo (0) (0)
30/09/2015
Fala Danilo, blz?
No caso da Activity de detalhes, o que tem de fazer é abrir um fragment dentro da Activity, dessa forma não precisará mexer com heranças, o layout da Activity terá a parte de CoordinatorLayout com APPBar e cia para permitir o scroll da Toolbar. O layout que conterá o conteúdo do fragment pode ficar logo abaixo da APPBar com o atributo de vinculação com o APPBar definido nele, assim basta carregar o fragment dentro desse layout. Veja esse vídeo para como utilizar o CoordinatorLayout e cia (http://www.thiengo.com.br/design-support-library-e-collapsingtoolbarlayout-material-design-android-parte-11 ).

No caso da lista de longitudes e latitudes, o jeito é esse mesmo, basta criar os markers somente depois de o mapa estar carregado por completo, pois já tive esse problema, de tentar colocar dados no maps mesmo ele ainda não estando carregado. Mantenha a referencia dos markers adicionados, pode ser um ArrayList de Markers tb. Abraço
Responder
Alexandre Ferreira (2) (0)
17/06/2015
Boa tarde Thiengo, meu caso e parecido com alguns de nossos colegas, o mapa aparece apenas quando emulo diretamente no meu celular, quando aplicação esta na google play o mesmo não roda. Estou utilizando o android Studio, quando foi criar a minha acitivty utilizei a propria que o android studio oferece. Entao ele cria uma classe e ja me mostra o meu sha1, eu copie ele e joguei dentro do meu projeto no google console que gerou minha chave, mas mesmo assim nao roda quando o mesmo esta publicado no google play.
Responder
Vinícius Thiengo (1) (0)
18/06/2015
Fala Alexandre, blz?
Seu problema mt provavelmente é o sha1 utilizado. Seu sha1 deve estar utilizando o arquivo keystore de debug para testes locais e não o keystore gerado para sua APP quando vc foi assinar. Quando assinou a APP no AndroidStudio foi gereda uma keystore com o nome que vc escolheu, realize o processo de busca do sha1 como fiz nessa série do Google maps, porém ao invés de utilizar o keystore de debug (como faço no vídeo) utilize a sua nova keystore. Depois de gerar o novo sha1, vá ao Console do Google e crie a key com o novo sha1, logo depois coloque a key no AndroidManifest de seu projeto da mesma maneira que foi feito com a chave de Debug. Agora é enviar para a PlayStore e testar. Assim deve ir sem problemas. Abraço
Responder
Alexandre Ferreira (2) (0)
18/06/2015
Bom dia Thiengo, obrigado pela resposta mas me desculpe pela minha ignorância, mas aonde eu vou para descobrir realmente o o keystore correto pois ja mudei varias coisas inseri informações no manifest como no video e nada de aparecer o mapa no quando o apk esta no google play.
Responder
Vinícius Thiengo (1) (0)
19/06/2015
Alexandre, quando vc assina a APP em: "Build => Generate signed APK". O AndroidStudio vai lhe perguntar sobre fornecer uma keystore ou criar uma nova no momento da assinatura de sua APP. Assumindo que vc vai criar uma nova, vc terá de fornecer algumas senhas de acesso a essa keystore, depois disso e de alguns outros dados fornecidos a sua APP será assinada e o arquivo keystore, com o nome que vc definiu para ele, será gerado e o AndroidStudio lhe perguntará se vc quer acessá-lo imediatamente, clique que sim e então vc saberá já onde ele se encontra em sua máquina, de qualquer forma se vc utilizar o buscador de seu SO vc tb o encontrará. Depois disso, volte ao vídeo no passo que gero o SHA1, na parte:

keytool -list -v -keystore c:\users\your_user_name\.android\debug.keystore -alias androiddebugkey

e altere para:

keytool -list -v -keystore pathDeSuaKeystoreGeradaNaAssinatura -alias aliasDefinidoPorVcParaEssaKeystore

Será solicitado a ti o password que informou na assinatura da APP, entre com ele e pronto, o SHA1 de sua APP assinada deve ser apresentado. Vá no Console do Google e gere uma nova API KEY com esse SHA1. Vá depois no AndroidManifest e troque a API KEY pela nova. Abaixo deixo alguns links de apoio para busca do SHA1. Abraço

http://www.truiton.com/2015/04/obtaining-sha1-fingerprint-android-keystore/

http://stackoverflow.com/questions/27609442/how-to-get-the-sha1-fingerprint-certificate-in-android-studio-for-debug-mode
Responder
Elias Martins Ferreira (1) (0)
30/05/2015
Boa noite Thiengo, queria saber o que pode estar acontecendo com meu app, ao instalar o app baixando-o
o mapa não abre, quando instalo pela ferramenta "android studio" funciona normalmente, no logcat não aparece erro
vc podeira me ajudar por favor. obrigado, abs.
Responder
Vinícius Thiengo (1) (0)
30/05/2015
Fala Elias, blz?
O que acontece é que vc não gerou novas chaves do Googles Maps para utilizar em sua APP com o keystore de produção. Ou seja, para gerar as chaves como no vídeo acima vc fez, seguiu os passos, porém depois que vc assina a APP é gerado um novo arquivo keystore, vc tem de fornecer o nome e local dele. Depois de ter feito isso vc faz exatamente o mesmo procedimento do vídeo acima para gerar o sha1 de sua APP, porém agora vc utiliza esse arquivo keystore novo gerado junto com o APK de sua APP. Será printado no prompt de comando o sha1 de sua APP, copie e carregue no Conosole do Google (como no vídeo) para gerar novas chaves para o Google Maps, assim troque no AndroidManifest.xml pelas antigas e então gere a APK novamente, porém agora não precisa de criar um novo arquivo keystore, pois ele já está criado. Depois disso pode postar sua APP que ela deve rodar. Note que provavelmente a assinatura para obter o sha1 com seu keystore novo será via prompt de comando. Abraço
Responder
Elias Martins (1) (0)
31/05/2015
obrigado Thiengo, abs.
Responder
06/05/2015
Boa Tarde Thiengo. Parabéns pelo seu trabalho e sempre sigo tutoriais para aprender mais em Android. Seguir esse tutorial pois estou começando a utilizar e aprender a parte de mapas do Android. Seguir seu tutorial, porém o mapa aparece em branco. Aconselharão comentarios colocar o "@integer/google_play_services_version" mas sempre aparece erro no projeto. Já limpei,reimportei,reincluir pasta do googlemaps e todas as opções do stackoverflow e nada. Poderia me ajudar? Abraços.PS.: To quase reinstalando desde do SDK pra ve se resolve.
Responder
Vinícius Thiengo (0) (0)
07/05/2015
Fala Joel, blz?
Minha dúvida é se vc criou lá no Console do Google a key para utilizar o GoogleMaps em sua APP, em modo de desenvolvimento vc utilizar a sha1 da keystore de debug (como apresentado no vídeo), em modo de produção, quando a APP está pronta para ser colocada na PlayStore (vc no caso já criou a keystore dela), vc utilizará a sha1 da keystore de sua APP e não a de debug, então irá ao Console do Google e gerará uma nova key e colocará no lugar da key anterior lá no ANdroidManifest.xml de sua APP. Mas a dúvida é se fez com a de debug, ou seja, gerou sua própria key e não a utilizada no vídeo acima. Se sim, verifique se está sendo printado algum erro ou informação no LogCat. Abraço
Responder
07/05/2015
Thiengo fiz o que aconselhou, refiz a key que tinha, gerando uma nova e  acho que deu certo pois em outro exemplo que peguei da net ele mostrou o mapa. O seu exemplo eu estou tendo um comportamento estranho do Eclipse(Luna), começou a demorar a compilar e no final travava o eclipse e mostrava o erro "Unable to execute dex:Java heap space and Unhandled event loop exception error in creating map activity" o qual eu acertei alterando o eclipse.ini da pasta central substituindo as duas linhas para "-Xms512m
-Xmx1048m"
Agora quando compilo mostra o erro "Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class fragment". PS.:Não acrescentei o @integer pois sempre da um erro de que nunca consegue achar esse integer.
Responder
Vinícius Thiengo (0) (0)
08/05/2015
Joel, blz?
Verifique se seu Google Play Services está atualizado (SDK Manager), caso não, o atualize. No xml ele não aponta a linha que tem o problema? Se tiver como tb, passe para o AndroidStudio (mesmo que só para testes). Abraço
Responder
Elias Martins (0) (0)
25/02/2015
Bom dia Thiengo.
queria tirar uma dúvida, e meu mapa só funciona no meu celular " sony xperia", quando instalo o apk em  outro celular um "galaxy s4 ou s5" o mapa não abre, você podeira me dizer o que pode estar ocorrendo?
já verifiquei todas as configurações mas não sei o que pode estar acontecendo, obrigado. abraços.
Responder
Vinícius Thiengo (0) (0)
25/02/2015
Fala Elias, blz?
Verifique a versão do PlayServices em seus aparelhos (Sony e Samsung), se o mais novo for os dos Galaxies  atualize o Google Play Services da APP caso não esteja ainda atualizado, caso contrário, se o mais atual for o da Sony, atualize os dos Galaxies. Verifique o que é printado no logCat quando vc utiliza o maps no Sony e o que é printado no logCat quando é o Galaxy. Com o LogCat verifique mensagens em laranja e vermelho preferencialmente. Abraço
Responder
Elias Martins (0) (0)
26/02/2015
Bom dia Vinicius, tudo bem? obrigado pela ajuda.
no, consegui resolver da seguinte forma, as versões do sansung eram mais novas,  o Play Service também, então achei uma solução, no sansung galaxy ,nas confg. de mode de desenvolvedor, habilitei a  confg. depuração usb, feito essas confg. aparece no eclipse para emular, nesse caso o mapa carregou na aplicação, normalmente, as confg. fontes desconhecidas "
já estavam habilitadas ,isso pode ajudar alguém como mesmo problema, obrigado pela ajuda, abraços
Responder
Vinícius Thiengo (0) (0)
26/02/2015
Perfeito Elias, vai me ajudar bastante tb quando for responder a problemas parecidos. Abraço
Responder
31/12/2014
thiengo, eu nao sei que bruxaria fez aqui, mas prestou..rsrsrs valeu, bom 2015
Responder
31/12/2014
Misspelled tag <permssion>: Did you mean <permission> ?
Responder
28/10/2014
Tudo bom Thiengo?
Estou tendo um probleminha, já tentei em dois aparelho celulares diferentes e no emulador na Google API 18 e nada...
O erro é o seguinte:
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.emerson.exemplomaps/br.com.emerson.exemplomaps.Maps}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment

Já cacei na internet e nada...
Será que vc consegue me ajudar..?

Abração! até mais...
Responder
Vinícius Thiengo (1) (0)
29/10/2014
Fala Emerson, blz?
Vc está utilizando o fragment via XML? Se sim altere para utiliza-lo via API Java (no script Java). Se o erro persistir coloque aqui a linha em que o LogCat está acusando o erro. Abraço
Responder
29/10/2014
Então Thiengo, eu já tentei das duas maneiras e nada...
O erro que está dando no logCat é exatamente esse que eu mandei pra vc...

java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.emerson.exemplomaps/br.com.emerson.exemplomaps.Maps}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment

Abração... Até mais
Responder
Vinícius Thiengo (0) (0)
30/10/2014
Emerson, dê uma olhada nesse link (http://stackoverflow.com/questions/20919048/android-android-view-inflateexception-binary-xml-file-line-8-error-inflatin ) de repente lhe ajuda. De qualquer forma, se não funcionar coloque aqui o código da entidade "br.com.emerson.exemplomaps.Maps" de seu projeto. Abraço
Responder
30/10/2014
Então Thiengo, inflelizmente não deu cara...
O código ta ai:

public class Maps extends FragmentActivity {

public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(layout.layout_main);

/*
GoogleMapOptions options = new GoogleMapOptions();
options.zOrderOnTop(true);
SupportMapFragment mapFrag = SupportMapFragment.newInstance(options);

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.llContainer, mapFrag);
ft.commit();
*/
}
}

<fragment
        android:id="@+id/fragment1"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

Tentei dos dois jeitos que vc explicou na video aula e nada.. =/

Abraço
Responder
Vinícius Thiengo (0) (0)
31/10/2014
Emerson quem é o tag xml de id R.id.llContainer em seu layout? Coloque ele tb aqui e remova o fragment xml de id "fragment1". Todas as suas classe de fragment estão vindo da lib android-support-v4.jar? Coloque a chamada do mapa dentro do onResume() de sua Activity para vermos se é alguma coisa envolvendo o delay que não está sendo aplicado. Abraço
Responder
08/11/2014
Emerson, gostaria de saber se deu certo contigo. Comigo ocorre o mesmo erro!
Responder
09/11/2014
Thiengo, tentei chamá-lo dentro do onResume, nada funfou... Agora como posso saber se as classes de fragment estão vundo da lib android-support-v4.jar? eu tinha colocado apenas uma lib no projeto, que é aquela do google play service...

Álysson, ainda nada tbm...
Responder
Vinícius Thiengo (0) (0)
09/11/2014
Ainda é o mesmo erro do Binary XML? Antes de iniciar o mapa vc está dando um delay? Mais ou menos como o código abaixo:

GoogleMapOptions options = new GoogleMapOptions();
options.zOrderOnTop(true);
mapFragment = SupportMapFragment.newInstance(options);
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.llContainerFragment, mapFragment, "tag");
ft.commit();
...
// Delay abaixo
private void startThreadInitMap(){
new Thread(){
public void run(){
while(mapFragment == null){
try {
Thread.sleep(500);
} catch (InterruptedException e) {}
}
getActivity().runOnUiThread(new Runnable(){
public void run(){
map = null;
map = mapFragment.getMap();
initMap();
}
});
}
}.start();
}


Provavelmente não é isso, pois o Binary XML não tem  a ver com isso, mas somente verifica se está fazendo mais ou menos assim, pois o mapFragment não é carregado na hora. Abraço
Responder
29/11/2014
E ae Thiengo, tudo bom?
Então cara eu tinha tentado de todas as maneiras, inclusive implementado esse codigo tbm.
Eu tinha desistido até, mas acordei hj pensando, vou conseguir fazer rodar esse mapa...
Segui a sua video aula e nada ainda, mas dai procurei na net e implementei apenas esse codigo:

<meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version">

Dai ele rodou. Não sei pq não tinha rodado antes.. hahahahaha

Obrigado pela ajuda Thiengo..
Grande Abraço...
Responder
Vinícius Thiengo (1) (0)
30/11/2014
Hum... é isso mesmo, na época em que fiz esse vídeo a versão do Google Play Services que estava utilizando não necessitava dessa tag, hj com a nova versão ela é necessária. Abraço
Responder
16/10/2014
Mais uma duvida,
eu posso colocar esse fragment do google maps em outro fragment?
Responder
Vinícius Thiengo (0) (0)
16/10/2014
Fala Stan, blz?
Pode sim, mas nesse caso recomendo que utilize o fragment via Script, e não via XML. Abraço
Responder