Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

20
respostas

Não consigo abrir o mapa

Já coloquei o projeto google_play_service_lib, gerei a chave e coloquei no meu android manifest, coloquei as permissões necessárias e nada funciona, testei no emulador 4.4, tentei no meu celular, mais todos param e fecham a aplicação. Fiz tudo como mostrou no vídeo, não consigo exibir o mapa o que pode ser???

20 respostas

Você entrou no Console do Google e criou o seu projeto lá com a chave que você gerou ?

Sim, criei

Ah um detalhe, no console do Google não aparece a opção Google Maps V2 como aparece na vídeo aula, só aparece Google Maps, eu ativei essa opção.

Vou colocar aqui o código do meu Android Manifest para ver se pode ser algum erro lá, se está faltando alguma permissão.

ARQUIVO MANIFEST

'

'

Beleza, posta aqui o seu Manifest e o Log quando o app quebra por favor

'''

'''

'''

O editor não deixa eu colar aqui o código

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.principal"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <permission
        android:name="com.principal.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.principal.permission.MAPS_RECEIVE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <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" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyA7zEItw3eNuWgTN8uFjYxT_LMmsXNyGaw" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="integer/google_play_services_version" />

        <activity android:name=".ListaAlunosActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".FormularioActivity" />
        <activity
            android:name=".MostraAlunosProximosActivity"
            android:label="@string/title_activity_mostra_alunos_proximos" >
        </activity>
    </application>

</manifest>

Me manda por email então Alan.m21@hotmail.com

Oi pessoal,

quando forem colocar trechos de código, usem três crases: ```. Vocês estavam usando três aspas: '''

Então é só fazer assim:

3 crases

código

3 crases

Você pode postar o Log com o erro ao tentar executar o app ?

06-01 14:12:35.561: E/AndroidRuntime(1139): Process: com.principal, PID: 1139
06-01 14:12:35.561: E/AndroidRuntime(1139): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.principal/com.principal.MostraAlunosProximosActivity}: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 6587000 but found 0.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.os.Handler.dispatchMessage(Handler.java:102)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.os.Looper.loop(Looper.java:136)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.ActivityThread.main(ActivityThread.java:5001)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at java.lang.reflect.Method.invokeNative(Native Method)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at java.lang.reflect.Method.invoke(Method.java:515)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at dalvik.system.NativeStart.main(Native Method)
06-01 14:12:35.561: E/AndroidRuntime(1139): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 6587000 but found 0.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.common.GooglePlayServicesUtil.D(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.maps.internal.x.T(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.maps.internal.x.S(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.maps.SupportMapFragment$b.nO(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.maps.SupportMapFragment$b.a(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.dynamic.a.a(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.dynamic.a.onCreate(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at com.google.android.gms.maps.SupportMapFragment.onCreate(Unknown Source)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.support.v4.app.Fragment.performCreate(Fragment.java:1481)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:908)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:571)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.Activity.performStart(Activity.java:5241)
06-01 14:12:35.561: E/AndroidRuntime(1139):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)

Olhando essa stacktrace é possível ver a causa do erro que apareceu (quebrei umas linhas para facilitar a leitura, mas o texto é o mesmo do erro):

The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 6587000 but found 0.  
You must have the following declaration within the <application> element:     

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

Ou seja, no seu AndroidManifest.xml, dentro da tag application, você precisa colocar o seguinte trecho:

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

Ficando assim:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.principal"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <permission
        android:name="com.principal.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.principal.permission.MAPS_RECEIVE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <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" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

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

        <activity android:name=".ListaAlunosActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".FormularioActivity" />
        <activity
            android:name=".MostraAlunosProximosActivity"
            android:label="@string/title_activity_mostra_alunos_proximos" >
        </activity>
    </application>

</manifest>

Você só tinha esquecido um @ antes do integer no seu meta-data. ;)

Realmente como não vi a falta desse @, coloquei e sai desse erro e esbarrei em outro. Parece que está gerando erro no Zoom, comentei o método e testei no celular finalmente abriu a tela, porém o mapa não abriu.

Estou deixando passar mais alguma coisa

Minha Classe MapaFragment

package com.fragment;

import java.util.List;

import com.dados.BdAluno;
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.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.negocios.Aluno;
import com.util.Localizador;

public class MapaFragment extends SupportMapFragment{

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Localizador localizador = new Localizador(getActivity());
        LatLng local = localizador.getCoordenada("Rua Jaú, 1103, Boqueirão, Praia Grande");
        centralizar(local);

        BdAluno objBdAluno = new BdAluno(getActivity());
        List<Aluno> alunos = objBdAluno.getLista();
        objBdAluno.close();

        for (Aluno aluno : alunos) {
            LatLng coordenada = localizador.getCoordenada(aluno.getEndereco());
            if(coordenada != null){
                MarkerOptions marcador  = new MarkerOptions().position(coordenada).title(aluno.getNome()).snippet(aluno.getEndereco());
                getMap().addMarker(marcador);
            }
        }
    }

    public void centralizar(LatLng local){
        GoogleMap mapa = getMap();    
        //Aplicando Zoom ao Mapa
        mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(local, 17));
    }

}

Log do Erro

06-01 16:54:55.007: E/AndroidRuntime(1183): FATAL EXCEPTION: main
06-01 16:54:55.007: E/AndroidRuntime(1183): Process: com.principal, PID: 1183
06-01 16:54:55.007: E/AndroidRuntime(1183): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://details?id=com.google.android.gms flg=0x80000 pkg=com.android.vending }
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.Activity.startActivityForResult(Activity.java:3424)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.Activity.startActivityForResult(Activity.java:3385)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:840)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.Activity.startActivity(Activity.java:3627)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.Activity.startActivity(Activity.java:3595)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at com.google.android.gms.dynamic.a$5.onClick(Unknown Source)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.view.View.performClick(View.java:4438)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.view.View$PerformClick.run(View.java:18422)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.os.Handler.handleCallback(Handler.java:733)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.os.Handler.dispatchMessage(Handler.java:95)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.os.Looper.loop(Looper.java:136)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at android.app.ActivityThread.main(ActivityThread.java:5001)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at java.lang.reflect.Method.invokeNative(Native Method)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at java.lang.reflect.Method.invoke(Method.java:515)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-01 16:54:55.007: E/AndroidRuntime(1183):     at dalvik.system.NativeStart.main(Native Method)

Hmm... Acho que esse log do erro não é referente ao erro que você está tomando. Você poderia ver se não tem outro erro mais abaixo dessa parte que você colocou no fórum?

06-01 20:51:58.067: E/AndroidRuntime(1327): FATAL EXCEPTION: main
06-01 20:51:58.067: E/AndroidRuntime(1327): Process: com.principal, PID: 1327
06-01 20:51:58.067: E/AndroidRuntime(1327): java.lang.RuntimeException: Unable to resume activity {com.principal/com.principal.MostraAlunosProximosActivity}: java.lang.NullPointerException: CameraUpdateFactory is not initialized
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2774)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2803)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.os.Handler.dispatchMessage(Handler.java:102)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.os.Looper.loop(Looper.java:136)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread.main(ActivityThread.java:5001)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at java.lang.reflect.Method.invokeNative(Native Method)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at java.lang.reflect.Method.invoke(Method.java:515)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at dalvik.system.NativeStart.main(Native Method)
06-01 20:51:58.067: E/AndroidRuntime(1327): Caused by: java.lang.NullPointerException: CameraUpdateFactory is not initialized
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.google.android.gms.internal.jx.b(Unknown Source)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.google.android.gms.maps.CameraUpdateFactory.nB(Unknown Source)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.google.android.gms.maps.CameraUpdateFactory.newLatLngZoom(Unknown Source)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.fragment.MapaFragment.centralizar(MapaFragment.java:40)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at com.fragment.MapaFragment.onResume(MapaFragment.java:22)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.Fragment.performResume(Fragment.java:1547)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:978)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1103)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1911)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:467)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:456)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.Activity.performResume(Activity.java:5323)
06-01 20:51:58.067: E/AndroidRuntime(1327):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2764)

Esse erro pode acontecer quando o mapa ainda não está pronto para ser usado. Uma forma de resolver isso é alterar seu método centralizar para dar zoom somente a partir do momento em que o mapa estiver pronto para ser usado, assim:

public void centralizar(final LatLng local){
    getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            //esse googleMap é o mesmo que você teria se chamasse o getMap
            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(local, 17));
        }
    });
}

Eu fiz as alterações, porém o mapa continua sem abrir, mais agora não gera mais erro no logcat

Pode ser por que na vídeo aula aparece para ativar a chave Google Maps V2 e no site do Google só é possível ativar a Google Maps Api?