Abbiamo presentato il tool gratuito MIT App Inventor 2.0 nel precedente articolo incentrato sullo sviluppo di app Android. Si tratta di uno strumento eccellente perché consente, in poco tempo, di realizzare app Android funzionali e abbastanza complesse.
Nell’articolo Come creare un’app Android da zero, abbiamo evidenziato come MIT App Inventor consenta di creare app Android senza installare nulla sul sistema locale e senza neppure dover connettere lo smartphone od il tablet al computer.
Nello stesso articolo abbiamo infatti spiegato come lo stato di avanzamento nello sviluppo dell’app Android ed il suo perfetto funzionamento possano essere verificati semplicemente collegando lo smartphone alla rete Wi-Fi (previa installazione, sul dispositivo mobile, dell’applicazione MIT AI2 Companion).
Creare app Android che legga i dati GPS
Invitandovi a fare riferimento all’articolo Come creare un’app Android da zero per conoscere i rudimenti di MIT App Inventor, proviamo questa volta a realizzare una app Android capace di effettuare la geolocalizzazione dell’utente.
Dopo aver avviato MIT App Inventor puntando il browser a questo indirizzo, si dovrà creare un nuovo progetto quindi posizionare tutta una serie di elementi nella schermata principale dell’applicazione.
Dalla colonna di sinistra bisognerà cliccare su User interface ed inserire, complessivamente, 14 labels e 2 buttons.
Cliccando su Layout, sempre nella colonna di sinistra, si dovranno trascinare sulla schermata dell’app Android 6 HorizontalArrangement.
In ogni elemento HorizontalArrangement (consente di regolare il layout in modo tale che gli elementi in esso contenuti vengano automaticamente allineati in orizzontale) andranno posizionate due labels.
Le proprietà Text delle varie etichette (labels) dovranno essere inizializzate come nella prima immagine. In particolare, le quattro etichette poste a destra delle labels impostate a latitudine e longitudine dovranno avere campo Text vuoto.
Le due etichette che riportano la stringa sconosciuto dovranno essere rinominate in Indirizzo
ed Indirizzo_MEM
facendo clic sul pulsante Rename nella colonna Components.
Le etichette a sinistra delle quattro stringhe latitudine e longitudine dovranno essere invece rispettivamente rinominate in LAT
, LONG
, LAT_MEM
e LONG_MEM
.
I due pulsanti debbono riportare i testi Ricorda posizione e Portami qui. In entrambi i casi le rispettive caselle Enabled (colonna Properties) devono essere disattivate.
Agendo sulla colonna di sinistra bisognerà quindi trascinare sulla schermata un LocationSensor (trascinarlo dalla sezione Sensors), un elemento TinyDB (sezione Storage) e, infine, un ActivityStarter (sezione Connectivity).
Il primo è un elemento che permette di stabilire la posizione geografica dell’utente attingendo ai vari sensori utilizzati dal device Android; il secondo consente di memorizzare delle informazioni in maniera permanente (quindi anche dopo la chiusura dell’app) in un database locale; il terzo consente di aprire altre attività (nel nostro caso servirà per aprire una mappa Google Maps con l’indicazione del tragitto da seguire).
Cliccando in un’area libera della schermata principale, si faccia clic sulla proprietà Title (colonna Properties) e la si modifichi in Dove ho parcheggiato?.
Ciò che vogliamo realizzare, infatti, è un’applicazione che consenta di memorizzare dove si è parcheggiata l’autovettura e visualizzare il percorso per tornare a recuperarla.
Dopo aver clicato su ActivityStarter (Non visible components in calce alla schermata principale dell’app), bisognerà impostare le proprietà seguenti come indicato:
Action android.intent.action.VIEW
ActivityClass com.google.android.maps.MapsActivity
ActivityPackage com.google.android.apps.maps
Programmare il comportamento dell’app Android
Cliccando sul pulsante Blocks in alto a destra si potrà, a questo punto, programmare il comportamento dell’app Android.
Per giungere al traguardo sono sufficienti cinque blocchi.
1° blocco: stabilire il posizionamento geografico dell’utente
Il primo blocco consente di stabilire dove si trova l’utente stimando l’indirizzo e recuperando le coordinate GPS dal sistema operativo.
Per iniziare si deve semplicemente cliccare, nella colonna di sinistra, sul LocationSensor1 quindi trascinare il blocco when LocationSensor1.LocationChanged.
Come nel caso delle tessere di un puzzle, il primo blocco appena aggiunto fungerà da contenitore per altri elementi.
I vari elementi set di colore verde si troveranno facendo clic sulle label corrispondenti, agendo sempre sulla colonna di sinistra dell’editor a blocchi.
L’elemento Location1.CurrentAddress è reperibile cliccando su LocationSensor1: come suggerisce il nome, si tratta di un blocco che permette di stimare l’indirizzo corrente sulla base della posizione geografica dell’utente.
Portando poi il puntatore del mouse su latitude e longitude, si avrà la possibilità di trascinare i due elementi get latitude e get longitude. Com’è ovvio, essi consentono di rilevare le coordinate GPS interrogando Android.
Il valore true, da abbinare all’ultimo elemento verde, può essere trascinato facendo riferimento al menù Logic.
Complessivamente, il blocco così creato consentirà di rilevare il momento in cui la posizione geografica dell’utente cambia (l’utente si sposta fisicamente).
Ad ogni cambiamento della posizione dell’utente, viene modificato il contenuto delle etichette contenenti indirizzo, latitudine e longitudine quindi viene attivato (proprietà Enabled il primo pulsante Ricorda posizione).
2° blocco: memorizza la posizione geografica dell’utente
Il secondo blocco consente di memorizzare in un database, conservato in locale sul dispositivo Android, la posizione geografica dell’utente. In questo modo l’informazione verrà mantenuta in memoria anche qualora l’utente dovesse temporaneamente chiudere l’app.
Il blocco-contenitore è in questo caso when Ricorda.Click do. Tale blocco può essere trascinato nell’editor cliccando sul pulsante Ricorda, nella colonna di sinistra.
In questo caso, i primi tre sottoblocchi di colore verde scuro (set) consentono di impostare la tre label indicate visualizzandovi (proprietà Text) le informazioni tratte dai sensori Android che stabiliscono la posizione dell’utente.
Cliccando su TinyDB1 nella colonna di sinistra si potranno trascinare poi le successive tre tessere viola. Accanto ai valori tag bisognerà trascinare tre stringhe testuali vuote (sezione Text nella colonna di sinistra) ed assegnare loro i valori indicati (indirizzo, lat e long).
Così facendo, l’app creerà un database locale contenente tre campi: indirizzo, lat e long. Abbinando a valueToStore (“valore da memorizzare” nel database) i dati provenienti dall’elemento LocationSensor1 si potrà salvare nel database indirizzo, latitudine e longitudine correnti.
L’ultimo blocco consente di abilitare (proprietà Enabled impostata su true) il pulsante per ottenere le indicazioni.
3° blocco: visualizza le indicazioni verso il punto di partenza su una mappa Google Maps
Il terzo blocco consente di visualizzare le indicazioni fino al punto di partenza non appena l’utente clicca il pulsante Portami qui.
Il blocco join si trova nella sezione Text e può essere utilizzato per combinare tra loro più stringhe di carattere. Una volta trascinato sull’editor, nella posizione corretta, bisognerà cliccare sul riquadro blu del blocco join così da fare spazio per otto stringhe:
Notare che la prima stringa deve essere impostata a http://maps.google.com/maps?saddr=
, la terza e la settiman devono contenere solo una virgola, la quinta la stringa &daddr=
.
L’obiettivo è ovviamente quello di comporre l’indirizzo che provoca l’apertura di Google Maps passando coordinate geografiche del punto di partenza e di quello di arrivo.
4° blocco: variabile globale che contiene l’indirizzo
Accedendo alla sezione Variables (colonna di sinistra) e trascinando initialize global (…) to, si potrà inizializzare una variabile globale indirizzoTemp che conterrà l’indirizzo presso cui si trova l’utente. Tale variabile dovrà essere inizializzata come vuota.
5° blocco: all’avvio dell’app recupera le informazioni memorizzate in precedenza
L’ultimo blocco, quello che ad una prima occhiata può sembrare il più complesso, consente di recuperare tutti i dati precedentemente memorizzati nel database e ripristinarli nelle giuste posizioni.
Il blocco-contenitore color senape si trova nella sezione Screen1 e consente di eseguire delle operazioni non appena la schermata principale dell’app viene caricata (when Screen1.Initialize do).
In primis, si richiede di impostare la variabile globale indirizzoTemp, precedentemente creata, salvandovi il contenuto del campo indirizzo. Nel caso in cui questo fosse inesistente (l’app viene avviata per la prima volta), la variabile resterà vuota (valueIfTagNotThere).
Più sotto si fa in modo (nel caso in cui la variabile globale contenesse l’indirizzo) di impostare il contenuto delle label leggendo le coordinate GPS dal database (campi lat e long).
Ed ecco, infine, l’app Android in funzione sullo smartphone.
– Liberamente tratto da uno degli esempi a corredo della documentazione di MIT App Inventor: Wherès my car?.