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>):
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:
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.