back to top

Creare app in grado di interagire coi sensori del dispositivo utilizzando MIT App Inventor

Nel corso di questa lezione creeremo una app con MIT App Inventor che sarà in grado di regolare il proprio comportamento in funzione delle misure ricevute da sensori.

In particolare, ipotizziamo che il dispositivo su cui sarà eseguita sia dotato di un sensore GPS per il rilevamento della posizione (tale sensore è presente, ad esempio, su quasi tutti gli smartphone attualmente in commercio): la nostra app stamperà a video la nostra posizione (ovvero Latitudine, Longitudine e Indirizzo) a seguito di un click su un opportuno pulsante. Faremo inoltre in modo, tramite la componente TextToSpeech (già utilizzata nel corso di una precedente lezione) che la posizione corrente sia descritta anche da un messaggio audio.

E’ bene precisare che il sensore per il GPS non è l’unico gestito da MIT App Inventor. Segue l’elenco dei componenti della categoria Sensor:

  • AccelerometerSensor – individua lo shaking e l’accellerazione;
  • BarcodeScanner – legge ed interpreta codici a barre;
  • Clock – restituisce il momento attuale sulla base delle impostazioni dell’orologio del device e consente di impostare timer ed intervalli di tempo;
  • LocationSensor – interagisce col GPS del dispositivo;
  • NearField – interagisce con le funzionalità NFC eventualmente integrate nel device;
  • OrientationSensor – intercetta l’orientamento del device ed i suoi mutamenti.

Come potete vedere, MIT App Inventor è in grado di "collegarsi" con le principali funzionalità di un moderno smartphone o tablet e di utilizzarle all’interno delle proprie app.

In questa sede non approfondiremo in modo didascalico metodi e proprietà di ciascuno dei componenti supportati, ma ci limiteremo a proseguire nel nostro percorso attraverso un esempio significativo che mostra come integrare un sensore all’interno di una nostra app.

Creare una semplice app di geolocalizzazione

Così come nei casi trattati nelle scorse lezioni, seguiamo il consiglio degli sviluppatori di MIT App Inventor che fanno riferimento proprio a questa app per prendere confidenza con le componenti di tipo Sensor e i behavior a esse associate. Accediamo quindi alla schermata iniziale e creiamo un nuovo progetto, di nome LocationSensor, come vediamo nella figura in basso.

Creiamo un nuovo progetto di nome LocationSensor

La nostra app necessita di cinque componenti visibili e due componenti non visibili. Per quanto riguarda le componenti visibili: quattro Label (destinate a Latitudine, Longitudine, Indirizzo e a un messaggio di attesa, da visualizzare mentre il sensore GPS sta rilevando i dati richiesti) e un Button (su cui cliccare per ottenere i dati del GPS).

Assegniamo ora a ciascuna delle appena citate componenti un nome significativo, in modo da poter distinguere chiaramente, ad esempio, la Label destinata a ospitare la Latitudine da quella della Longitudine o dell’Indirizzo, quando ci troveremo in seguito a formulare i behavior. Per rinominare le componenti, possiamo servirci del pulsante Rename, in basso nel pannello Components. Assegniamo alle quattro Label i nomi Latitudine, Longitudine, Indirizzo e MessaggioAttesa. Assegniamo al Button il nome PulsanteRilevaPosizione.

Impostiamo ora come segue le proprietà di queste cinque componenti:

  • impostiamo la proprietà Text delle Label Latitudine, Longitudine e Indirizzo a "Nessuna lettura";
  • impostiamo la proprietà Text di PulsanteRilevaPosizione a "Rileva posizione";
  • impostiamo la proprietà Text della Label MessaggioAttesa a "Attendere che la posizione venga determinata…". Selezioniamo infine, sempre per quanto riguarda la Label MessaggioAttesa l’opzione Hidden (ovvero nascosta) dal menu a tendina Visible, nel pannello Properties. In questo modo, nascondiamo, all’avvio dell’app il messaggio di attesa alla vista dell’utente. Tale messaggio dovrà infatti essere visualizzato soltanto nell’intervallo di attesa tra il clic su PulsanteRilevaPosizione e l’aggiornamento delle Label Latitudine, Longitudine e Indirizzo. Ci occuperemo in seguito di gestire tale comportamento realizzando i behavior della nostra app.

Inseriamo infine le componenti non visibili LocationSensor (dall’elenco Sensors nel pannello Palette) e TextToSpeech.

Nella figura in basso, possiamo osservare la scheda Designer dell’app LocationSensor, così come l’abbiamo appena costruita:

Scheda Designer dell'applicazione LocationSensor

Passiamo ora alla scheda Blocks e così alla realizzazione dei behavior. Ne sono necessari due: la gestione del clic su PulsanteRilevaPosizione, con conseguente rilevamento della posizione corrente, e l’aggiornamento delle label con i nuovi dati.

Per quanto riguarda il primo behavior, ci serviamo del blocco "when PulsanteRilevaPosizione.Click" e associamo a esso le azioni "set LocationSensor1.Enabled to" "true" (ovvero: abilita il sensore GPS) e "set MessaggioAttesa.Visible to" "true" (ovvero: visualizza il messaggio di attesa). Possiamo osservare la realizzazione di tale behavior nella figura in basso:

Behavior per rilevare la posizione corrente

Concentriamoci ora sul behavior che regola l’aggiornamento delle Label. Partiamo, a tale scopo, dal blocco "When LocationSensor1.LocationChanged" (attivato a seguito dell’abilitazione del sensore GPS o quando l’utente cambia posizione). A tale evento è associata una sequenza di azioni per l’aggiornamento delle Label Latitudine, Longitudine e Indirizzo:

  • "set Latitudine.Text to", "get latitude"
  • "set Longitudine.Text to", "get longitude"
  • "set Indirizzo.Text to", "LocationSensor1.CurrentAddress"

Trasmettiamo poi un messaggio vocale circa l’indirizzo corrente, tramite TextToSpeech, tramite "TextToSpeech1.Speak", costruendo il messaggio assemblando "Posizione cambiata: " e "Indirizzo.Text" tramite "join".

Infine disabilitiamo il LocationSensor tramite "set LocationSensor1.Enabled to", "false" e nascondiamo il contenuto della Label MessaggioAttesa con "set MessaggioAttesa.Visible to", "false".

Possiamo osservare la realizzazione di questo secondo behavior nella figura in basso:

Behavior per inviare l'aggiornamento delle Label
Pubblicitร