Mapas e geolocalização com MapFragment

Ficheiros da aplicação

  • No menu, abrir a vista de Navigator: Window – Show View – Navigator
  • Em Navigator (janela do lado esquerdo), premir o botão direito do rato e escolher New – Project. Depois selecionar Android e Android Application Project. Premir Next. Surge uma janela de diálogo.
    • Em Application Name, colocar “Mapas”
    • Em Project Name, colocar “Mapas”
    • Em package name, colocar “com.lingweb.mapa”
    • Em Minimum Required SDK selecionar Google APIs 3.0
    • Em Target SDK selecionar Google APIs 4.2 (ou versão mais recente)
    • Premir Next três vezes
    • Em Create Activity, selecionar BlankActivity. Premir Next
    • Em Activity Name, colocar “Mapas”
    • Em Layout Name, colocar “mapas_layout”
    • Premir Finish
  • Em Navigator, premir o botão direito do rato sobre o projeto Mapas e criar uma diretoria com o nome “deploy”
  • Em Navigator, abrir o ficheiro AndroidManifest.xml e colocar dentro da marca application, as seguinte linhas (antes de <application>):

<permission
android:name=”com.example.mapdemo.permission.MAPS_RECEIVE”
android:protectionLevel=”signature” />

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

<uses-permission
android:name=”com.example.mapdemo.permission.MAPS_RECEIVE” />
<uses-permission
android:name=”android.permission.INTERNET” />
<uses-permission
android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
<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” />

e no fim (antes de </application>):

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

Na linha anterior deve ser colocada a chave fornecida pelo Google.

  • Em Navigator, abrir o ficheiro /res/layout/mapas_layout.xml e substituir o seu conteúdo pelo código seguinte. No parâmetro android:apiKey deve colocar a chave que obteve no Google. O código abaixo contém três objetos que constituem o esquema gráfico da aplicação: o primeiro é um objeto do tipo MapView, onde é colocado o mapa, os outros dois são textos onde é escrita a posição (latitude e longitude) do telemóvel.

<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=”.Mapas” >

<fragment
android:id=”@+id/map”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
/>

</RelativeLayout>

É necessário importar a biblioteca do Google Play services descarregada anteriormente através do SDK Manager e incluí-la no projeto.

  • No Eclipse, selecionar:
  • File – Import – Android – Existing Android Code into Workspace
  • Premir Next. Em Browse, selecionar o caminho para a biblioteca:
    C:\adt-bundle-windows-x86_64\sdk\extras\google\google_play_services\ \libproject\google-play-services_lib
  • Marcar a opção Copy projects into workspace e premir Finish
  • Em Navigator, premir o botão direito do rato sobre o projeto e selecionar Properties
  • Selecionar Android. Em Library, não marcar a caixa Is Library e adicionar a biblioteca google-play-services_lib
  • Por fim, colocar o código da aplicação:
  • Em Navigator, dentro das diretorias do projeto, abrir o ficheiro /src/com/ /lingweb/mapa/Mapas.java e colocar o código:
package com.lingweb.mapa;import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class Mapas extends Activity implements LocationListener {
static final LatLng LISBOA = new LatLng(38.725, -9.151);
private GoogleMap mapa;
LocationManager lm;
Marker lisboa, aqui;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapas_layout);
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 3, this);
mapa = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
lisboa = mapa.addMarker(new MarkerOptions().position(LISBOA)
.title(“Lisboa”));
aqui = mapa.addMarker(new MarkerOptions()
.position(LISBOA)
.title(“Bom dia”)
.snippet(“Você está aqui”)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher)));

// Move a câmara instanteneamente para lisboa com um zoom de 15.
mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(LISBOA, 10));
if ( !lm.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
Toast.makeText(getApplicationContext(), “Por favor, ative o GPS”, Toast.LENGTH_LONG).show();
}

}

@Override
public void onLocationChanged(Location loc) {
double lat = loc.getLatitude();
double lng = loc.getLongitude();
LatLng sitio = new LatLng(lat, lng);
// Zoom in, com animação da câmara.
mapa.animateCamera(CameraUpdateFactory.newLatLngZoom(sitio, 15), 2000, null);
aqui.setPosition(sitio);
}

@Override
public void onProviderDisabled(String a) {}
@Override
public void onProviderEnabled(String a) {}
@Override
public void onStatusChanged(String a, int b, Bundle c) {}

}

No caso do Eclipse produzir um erro devido à falta de tradução de cadeias de carateres, o problema pode ser contornado da seguinte forma:

  • No Eclipse, em Window – Preferences, selecionar Android e na caixa procurar CorrectnessMessages
  • Premir ExtraTranslation e alterar a Severity para Warning. Fazer o mesmo com a opção MissingTranslation

As aplicações que usam a biblioteca google-play-services_lib não podem ser executadas no emulador. É necessário criar uma aplicação assinada e executá-la num dispositivo físico.
Para executar esta aplicação tem que instalar o Google Play Services no dispositivo, a partir da loja do Android: Google Play.

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *