Guida: come creare una progetto Android usando le Android Maps V2

android-sdkOoooook, ragazzi,

questa sera, per inaugurare il mio arrivo tra i collaboratori di WebInBlack.net, ho deciso di spiegarvi come creare un progetto Android usando le Google Maps API V2.
Riporto il tutto da un mio vecchio articolo vista la mancanza di tempo in questo periodo, ma sono certo che, se avete avuto i miei stessi problemi, sicuramente apprezzerete le soluzioni che vi sto per indicare. O al più direte "già fatto".
Prima di tutto fatemi dire che usare le API V2

  1. è un po' più difficile delle API V1, poiché le librerie per le Maps non sono contenute in un archivio .jar, ma devono essere importate come un progetto libreria;
  2. rendono la vostra vita più facile durante la programmazione delle activity della vostra app. I listener sono ottimizzati, molta della logica è già stata implementatata, quindi i benefici sono maggiori delle difficoltà.

Cominciamo.

Se siete arrivati a questo punto, deduco quindi che siate già Sviluppatori Android, avete pagato la vostra quota a vita, e avete ottenuto la vostra API KEY dalla vostra API CONSOLE.
Se non sapete cosa significa ciò che ho appena scritto, non esitate a lasciare un commento nell'articolo (ma credetemi, sul web ne trovate a bizzeffe).

A questo punto aprite Eclipse, cliccate su "Android SDK Manager", quindi controllate che il servizio "Google Play Services" sia installato. Se non lo è, scaricatelo

 

1.1 Come controllare se è presente Google Play Services

1.1 Come controllare se è presente Google Play Services

 

Ok, ora avete tutto ciò che vi serve per usare le maps.
- Create un nuovo Progetto Android,
chiamatelo "Gennarino", o "Francis_FROM_Coppola" se vi piace. O "PrjBase" se siete indescrivibilmente noiosi.
- Quindi andate sul vostro "androidManifest.xml" 
e aggiungete le stringhe evidenziate, come nelle foto a seguire...

 

1.2 androidManifest.xml - AGGIUNGERE I PERMESSI E ALTRE IMPOSTAZIONI

1.2 androidManifest.xml - AGGIUNGERE I PERMESSI E ALTRE IMPOSTAZIONI

 

1.3 androidManifest.xml  - AGGIUNGERE LA KEY

1.3 androidManifest.xml - AGGIUNGERE LA KEY

 

... dalle quali tutti voi potete capire quanto io sia noioso... 😉
Ad ogni modo, fermiamoci un momento per spiegare.
    • <permission android:name="prjbase.main.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
      Significa che voi chiedete al vostro Sistema Operativo il permesso per ricevere le MAPS, usando una firma (la vostra API KEY);
    • <uses-feature     android:glEsVersion="0x00020000" android:required="true" />
      Questa indica la versione delle openGL ES (in questo caso la 2, guardate in mezzo agli zeri), e se è richiesta;
    • <uses-permission ...../>
      Queste stringhe sono semplici, e simili ai PERMISSION nell'uso; indicano quale permesso l'app è autorizzata ad usare;
    • <meta-data
      android:name="com.google.android.maps.v2.API_KEY"
                  android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
      Qua dovete inserire la vostra API KEY V2, al posto di xxx...

Modifichiamo la nostra vista map.xml

Aggiungendo un FRAGMENT che conterrà la nostra mappa. Google ha deciso di usare i MapFragment invece delle MapView, e ciò per aumentare le prestazioni (un'activity è parecchio più pesante di un fragment!!!). Comunque è così, quindi fate come indicato nella immagine.
1.4 Adattare la vostra vista mappa

1.4 Adattare la vostra vista mappa

 

Ok, abbiamo aggiornato il manifest, e aggiunto il fragment alla vista. Ora dobbiamo:
- Importare google-play-services_lib come PROJECT LIB
Prima di tutto dobbiamo cliccare col tasto destro sullo spazio bianco del nostro PACKAGE EXPLORER, quindi selezionare IMPORT e scegliere "EXISTING ANDROID CODE INTO WORKSPACE".
STATE ATTENTI: NON SCEGLIETE "EXISTING PROJECT INTO WORKSPACE
Quindi navigate all'interno della vostra directory android-sdk, e andate in
<vostra_android-sdk_DIRECTORY>\extras\google\google_play_services\libproject

e cliccate su FINISH.

 

1.5 Importare google-play-services_lib come project lib

1.5 Importare google-play-services_lib come project lib

 

Wow! Grandi! Questo era il peggio. Passiamo al prossimo step.

 AGGIUNGERE QUESTA LIB NEL NOSTRO PROGETTO

Quindi click destro sul progetto, click su Properties, quindi andate sul tab Android. Scendete fin dopo la lista delle versioni di Android che avete scaricato e, finalmente, avrete raggiunto la sezione Library.
Cliccate sul tasto "Add", e selezionate "google-play-services_lib", quindi OK.
1.6 Aggiungere google-play-services_lib nel vostro progetto

1.6 Aggiungere google-play-services_lib nel vostro progetto

 

BEN FATTO, DELTA!

CARICARE IL NOSTRO MAP FRAGMENT NELLA NOSTRA ACTIVITY

Per caricare potrete semplicemente usare questo comando, subito dopo il setContentView(R.layout.map);
 
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map_view)).getMap();
 
Fatemi dire che l'oggetto map è una  map private GoogleMap;  aggiungetelo all'esterno del metodo onCreate(), nell'activity. Questo è il codice della nostra map activity.
package prjbase.main;
import prjbase.global.Global;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolygonOptions;
public class Map extends Activity {
@SuppressWarnings("unused")
private Global global;
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
//SET OUR MAP FRAGMENT AS THE MAP CONTAINER, AND ASSIGN IT TO GoogleMap OBJECT
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map_view)).getMap();
//INIT GLOBAL OBJECT
global=(Global)getApplicationContext();
//CENTER OUR MAP ON 38.0, 16.0
LatLng start=new LatLng(38.0, 16.0);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(start, 15));
//CHANGE OUR CAMERA ANGLE (IN THIS CASE AT 45° ON Y AXIS)
map.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(start, 0f, 45f,0f)));
//ADD A MARKER
MarkerOptions marker=new MarkerOptions()
.position(new LatLng(Global.macelloLatitude, Global.macelloLongitude))
.title("MACELLERIA SOCIALE")
.snippet("Nota anche come 'U SPITALA'")
.icon(BitmapDescriptorFactory.fromResource(getResources().getIdentifier("macello", "drawable", "prjbase.main")));
map.addMarker(marker);
// --> ANIMATE FROM CAMERA DISTANCE 15 TO 17 IN 2000 MILLISECONDS
map.animateCamera(CameraUpdateFactory.zoomTo(17), 2000, null);
// --> SET MAP TYPE
map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
// --> ACTIVATE "MY LOCATION" BUTTON (MOVE CAMERA ON YOUR LAT/LNG)
map.setMyLocationEnabled(true);
}
}

Bene ragazzi, è tutto.

A riveder le stelle!

 Note: you can find the horrible english version of my article here.