online store for every kind of maker

Iniziare a programmare con Android: terza lezione – google maps e android

Iniziare a programmare con Android: terza lezione – google maps e android

Ben tornati per il terzo round con il nostro robottino! Con questa lezione proviamo a realizzare una piccola applicazione in grado di ricercare e visualizzare un indirizzo sull’app standard Google Maps di Android.

Cominciamo con il creare una nuova applicazione che per comodità chiameremo MyMaps. Per sapere come creare una nuova applicazione con Android Studio, fare riferimento alla prima lezione di questo tutorial.

La nostra applicazione avrà bisogno di una main view con la quale l’utente potrà inserire un indirizzo e successivamente attivare la ricerca dello stesso su Google Maps.
Per questo motivo andiamo a modificare il file activity_main.xml che possiamo trovare sotto:

/src/main/res/layout

Di seguito riportiamo l’XML definitivo della nostra view.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="it.makerzone.app.MainActivity"
    tools:ignore="MergeRootFrame" >
 
 
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center|top">
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Indirizzo"
            android:id="@+id/textViewAddress"
            android:layout_gravity="center|top"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp" />
 
        <EditText
            android:id="@+id/textAddress"
            android:layout_width="424dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textViewAddress"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp" />
 
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cerca sulla MAPPA"
            android:id="@+id/buttonOpenMap"
            android:layout_marginTop="40dp"
            android:layout_below="@+id/textAddress"
            android:layout_centerHorizontal="true"
            android:textSize="25dp"
            android:onClick="openMap"
            android:minHeight="100dp" />
 
    </RelativeLayout>
</FrameLayout>

Per comodità usiamo un componente RelativeLayout che ci consente di aggiungere ogni elemento in una posizione relativa ad elementi di pari livello o rispetto al componente padre.

Posizioneremo, quindi, una TextView che funge da semplice label, una EditText che si posizionerà al di sotto della label specificando la seguente direttiva:
“android:layout_below=”@+id/textViewAddress”

ed infine un Button che si posizionerà al di sotto della Text View tramite la seguente direttiva: android:layout_below=”@+id/textAddress”.

Una volta definita la main view possiamo scrivere il codice Java necessario nella relativa classe
mainActivity che possiamo trovare nel package src/main/java/it.makerzone.app.

Di seguito riportiamo il codice della mainActivity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void openMap(View v) {
        EditText textAddress = (EditText)findViewById(R.id.textAddress);
        String uri = String.format(Locale.ITALIAN, "geo:0,0?q=%s", textAddress.getText());
        Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri));
        startActivity(intent);
    }
}

Dopo aver eliminato dal codice il riferimento a tutti quegli elementi della mainView che abbiamo tolto per ottenere il nostro layout desiderato (non potrete non notarli perchè la classe presenterà una serie di errori di compilazione che lo studio evidenzierà), possiamo creare il metodo openMap che sarà poi richiamato dal bottone precedentemente creato sulla mainView. Di seguito la direttiva XML necessaria per agganciare il metodo al componente Button:
android:onClick=”openMap”.

Proviamo a commentare ciascuna riga del nostro metodo openMap:

EditText textAddress = (EditText)findViewById(R.id.textAddress);
Con questa istruzione siamo in grado di istanziare un oggetto EditText mappandolo sull’elemento XML aggiunta sulla mainView. La chiave con la quale viene effettuato il mapping è l’id dell’elemento XML.

String uri = String.format(Locale.ITALIAN, “geo:0,0?q=%s”, textAddress.getText());
Con questa istruzione possiamo formattare opportunament la stringa che verrà poi incapsulata nell’intent dedicato all’apertura della mappa. La stringa contiene l’indirizzo prelevato dall’edit text presente sulla mainView.

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri));
Con questa istruzione possiamo instanziare un oggetto di tipo Intent che incapsulerà la stringa precedentemente formattata con l’indirizzo da ricercare.

L’intent in Android è un meccanismo con il quale è possibile descrivere l’intenzione di fare qualcosa come nel nostro caso l’intenzione di avviare un activity oppure di eseguire una chiamata oppure inviare un’email. In Android ogni cosa, praticamente, passa attraverso un’intent.
Esistono molte tipologie di intent, ma, ovviamente, è possibile definire un intent completamente custom.
L’intent è uno dei concetti fondamentali in Android.

startActivity(intent);
L’activity è uno degli elementi centrali di ogni applicazione Android. Generalmente è un concetto legato allo sviluppo delle interfacce grafiche in quanto un’activity rappresenta una singola schermata della nostra App.
Nel normale funzionamento delle applicazioni può esserci una sola activity attiva per volta.

L’istruzione sopra riportata è in grado di avviare un activity che potrà gestire l’intent passato come parametro, nel nostro caso avviare l’applicazione Google Maps ricercando l’indirizzo inserito.

A questo punto tutto è pronto e possiamo avviare la nostra APP.

Se sull’emulatore non è stata installata l’applicazione Google Maps, il programma verrà terminato con un’eccezione nel momento che si premerà il pulsante di ricerca. Nel caso, conviene avviare l’applicazione direttamente su un dispositivo Android che generalmente possiedes di default tale software.

Buon divertimento e a presto!

0 Commenti

Leave a reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Non c'è bisogno del permesso di nessuno per fare grandi cose. Massimo Banzi