📍 P09: PokeMap (Ginásios na Cidade)

O mundo é o seu tabuleiro! Neste projeto, você aprenderá a usar o GPS do celular e o Google Maps para mostrar onde estão os “Ginásios Pokémon” na sua cidade real.


🎯 Objetivo do Projeto

Exibir um mapa interativo com marcadores (pins) em locais específicos (Latitude e Longitude). O app deve mostrar a posição atual do jogador e permitir que ele clique em um “Ginásio” no mapa para ver informações sobre a batalha.


📖 Dicionário do Projeto

  • Google Maps SDK: A ferramenta oficial do Google para colocar mapas dentro de apps.

  • LatLng: É o conjunto de Latitude e Longitude (as coordenadas matemáticas de um lugar).

  • Location Services: O sistema do Android que conversa com os satélites para saber onde você está.

  • API Key: Uma “senha mestre” que você gera no Google Cloud para que o mapa funcione.


🏗️ Passo a Passo (Wizard do Android Studio)

  1. Template: Empty Compose Activity.

  2. Name: AppPokeMap_SeuNome.

  3. Package Name: br.com.curso.pokemap.


🎨 Parte 1: Configurando o Manifesto

Você precisará de permissões de localização e da tag de API Key:

<!-- Permissões -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 
<!-- Dentro da tag <application> -->
<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="SUA_API_KEY_AQUI" />

⚙️ Parte 2: Colocando Marcadores (Pins)

No Compose, usamos a biblioteca maps-compose. Veja como é simples colocar um ponto no mapa:

@Composable
fun MapaDeGinasios() {
    val saoPaulo = LatLng(-23.5505, -46.6333)
    val cameraPositionState = rememberCameraPositionState {
        position = CameraPosition.fromLatLngZoom(saoPaulo, 12f)
    }
 
    GoogleMap(
        modifier = Modifier.fillMaxSize(),
        cameraPositionState = cameraPositionState
    ) {
        // Marcador do Ginásio
        Marker(
            state = MarkerState(position = saoPaulo),
            title = "Ginásio do Ibirapuera",
            snippet = "Chefe: Brock | Nível: 10"
        )
    }
}

✅ Gabarito Comentado (Pegando Localização)

Para saber onde o jogador está e ativar o ponto azul no mapa:

GoogleMap(
    modifier = Modifier.fillMaxSize(),
    properties = MapProperties(isMyLocationEnabled = true), // Ativa ponto azul
    uiSettings = MapUiSettings(myLocationButtonEnabled = true) // Ativa botão de focar
)

📂 Organização de Pastas

br.com.curso.pokemap MainActivity.kt (Contém a UI e a lógica do mapa).


??? Requisitos de Configuração e Solução de Problemas

Se você encontrar erros ao tentar rodar este projeto, verifique os pontos abaixo:

1. Suporte ao AndroidX

O arquivo gradle.properties na raiz do projeto deve conter:

android.useAndroidX=true

android.enableJetifier=true

org.gradle.jvmargs=-Xmx2048m

2. Dependências do Google Maps

Certifique-se de adicionar as dependências no build.gradle:

  • com.google.maps.android:maps-compose
  • com.google.android.gms:play-services-maps
  • com.google.android.gms:play-services-location