Android Lezione 16 – Aggiungiamo le mappe alla nostra app Parte I

Iniziamo ora una serie di lezioni (il numero ancora non è definito) relativa ai servizi di google maps.

In questa prima parte vedremo principalmente i passi per configurare e installare i servizi di google maps. Google maps ora è diventato parte dei servizi di Play services.

Quindi prima di tutto occorre se non è stato gia fatto in precedenza installare i Play services. Come per altri componenti, questi si installano mediante l’sdk manager. Li potete trovare nella sezione “Extras”.

Una volta installati, per rendere disponibili questi servizi alla nostra app (e non incorrere in errori di compilazione del nostro progetto) dobbiamo importare il progetto google-play-services_lib dentro eclipse , questo progetto si trova nel seguente path:

~/sdkpath/extras/google/google_play_services/libproject/google-play-services_lib/

Dopo di chè dobbiamo aggiungerlo come libreria al progetto che utilizzerà google maps. Per farlo, aprite le properties del vostro progetto, aprite il tab Android e aggiungete il progetto google-play-services_lib nella sezione library:

Aggiungere play services lib a progetto

 

Come per molti altri servizi offerti da google, dobbiamo registrare la nostra app e creare delle api key per autenticare la nostra applicazione con i servizi di google.

Quindi prima di tutto registriamo la nostra app sulla google api console, all’indirizzo: https://code.google.com/apis/console/  da qui se non lo avete mai fatto in precedenza dovete creare un progetto, che il sistema chiamerá Api Project.

Ora controlliamo che le Maps Api siano abilitate, apriamo la sezione Apis & Auth e controlliamo che la voce Google Maps API v2 sia ad ON, come in figura:

Attivare il servizio google maps
Attivare il servizio google maps

Non ci resta che creare un certificato per l’applicazione per terminare questa parte. Sempre sezione APIs and Auth, selezionamo Credentials, e creiamo una nuova Api key, ci verrá chiesto che tipo di chiave vogliamo creare, ovviamente dovremo dare Android Key, si aprirá una schermata che ci chiede di la fingerprint della chiave, a questo punto dobbiamo estrarre le informazioni del certificato usato dalla nostra app. In questo esempio useremo il certificato di debug utilizzato per i test delle nostre app (chiaramente questo certificato in applicazioni in produzione non può essere utilizzato).

Apriamo un terminale (in questo suppongo che vi troviate su linux), portatevi all’interno della cartella ~/.android e date il seguente comando:

keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android

che serve per visualizzare la fingerprint della chiave. L’output che riceveremo sará simile al seguente:

Fingerprint della chiave

A noi interessa la linea che contiene il digest SHA1. Copiamo la fingerprint contenuta in quella linea, e incolliamola nella schermata della API Console, seguita da un ; e dal base package della applicazione che la userá, quindi se per esempio la nostra chiave sará utilizzata da un programma che ha come base package com.italialinux.example avremo qualcosa di siimle al seguente:

E1:A2:B3:B8:54:71:4F:40:68:35:99:8B:33:42:D2:EA:BC:49:33:36;com.italialinux.example

A questo punto possiamo premere il tasto create.

Una volta salvato, ci verrá fornita una API Key che andremo ad aggiungere nel manifest della nostra applicazione.

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

Dove API_KEY va sostiuito con l’api key che avete appena ottenuto (si tratta di una stringa di 40 caratteri).

Quindi dobbiamo innanzitutto aggiungere il container per la nostra mappa, nel file xml del layout (in questo caso si tratta di activity-main.xml se avete creato un progetto secondo le impostazioni di default):

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>

 

Ora l’app è pronta per usare le mappe di google. Per questa volta sfrutto il codice di esempio della pagina di google sulle google maps api:

import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.*;
import android.app.Activity;
import android.os.Bundle;
 
public class MapPane extends Activity implements OnMapReadyCallback {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map_activity);
 
        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
 
    @Override
    public void onMapReady(GoogleMap map) {
        LatLng sydney = new LatLng(-33.867, 151.206);
 
        map.setMyLocationEnabled(true);
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));
 
        map.addMarker(new MarkerOptions()
                .title("Sydney")
                .snippet("The most populous city in Australia.")
                .position(sydney));
    }
}

Chiaramente adattate il file Manifest per utilizzare questa classe (che a questo punto del corso immagino sapete fare).

E ora lanciamo la nostra app… OOOps..  qualcosa non va!

 

Problema emulatore

Questo perchè l’emulatore android non hai play servicesi e il play store installati, necessari per far funzionare correttamente le mappe di google. Ma niente paura, lo risolveremo presto!

Ora a questo problema ci sono quattro possibili soluzioni:

  1. Scaricare e installare gennyMotion come emulatore
  2. Utilizzare un device reale
  3. Oppure installare google play service con il play store sul dispositivo.
  4. Utilizzare una immagine Android per l’emulatore con API Level maggiore o uguale di 19

Vediamo di spiegare i passi da fare per completare l’opzione numero tre!

Come dicevo poco sopra le Google Maps API v2 necessitano i google play services installati e funzionanti sul dispositivo, ma questi normalmente non sono disponibili con l’emulatore. Quindi scaricatevi una copia aggiornata dei seguenti APK:

  • com.android.vending apk
  • com.google.android.gms apk

Vi suggerisco di fare una ricerca su questi due package su google e scaricare sempre l’ultima versione disponibile, perchè altrimenti l’app potrebbe comunque non mostrare la mappa chiedendo una versione più aggiornata di questi due packages.

Una volta che vi siete procurati questi files, posizitionatevi nella cartella platform-tools dell’sdk android, e date i seguenti comandi (ad emulatore avviato):

user@pc:path/platform-tools$ ./adb -e install /path/to/com.android.vending.apk
user@pc:path/platform-tools$ ./adb -e install /path/to/com.google.android.gms.apk

Se siete su windows omettete il ../ davanti al comando

Fatto questo dovreste essere in grado di far girare google maps sul vostro enulatore.

Per oggi è tutto, nelle prossime lezioni vedremo di muovere i primi passi con i servizi delle mappe di google.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.