HTML.it logo
Learn
  • Design
    • Grafica
    • User Interface Design
    • Adobe Creative Suite
    Guide
    Approfondimenti
    Faq
    Notizie
    Tutto in Design >
  • Development
    • .NET
    • ASP
    • CMS
    • Flash
    • Java
    • JavaScript
    • PHP
    • Essentials
    • Ruby
    • XML
    • Editor
    • CSS
    • HTML
    Guide
    Approfondimenti
    Script
    Faq
    Notizie
    Tutto in Development >
  • Mobile
    • Android Studio
    • Cordova
    • Eclipse
    • Objective C
    • Swift
    Guide
    Approfondimenti
    Script
    Faq
    Notizie
    Tutto in Mobile >
  • Server
    • Cloud
    • Database
    • OS
    • Sicurezza
    • Network
    Tutto in Server >
  • Digital Marketing
    • SEO
    • Affiliate Marketing
    • Social Media Marketing
    Tutto in Digital Marketing >
  • Makers
    • Arduino
    • RaspberryPi
    • Stampa 3D
    Guide
    Approfondimenti
    Notizie
    Tutto in Makers >
  • Game Design
    • Unity
    Guide
    Approfondimenti
    Notizie
    Tutto in Game Design >
Download
  • Audio e Video
    • Player Audio Video
    • Codec audio
    • Montaggio
    • Masterizzazione
    • Ripper e Convertitori
    • Speech
    • Creatività
    • Ripresa
    • Riproduzione
    Tutto in Audio e Video >
  • Educazione
    • Bambini
    • Cartoni in Streaming
    • Cucina
    • Salute e Benessere
    • Didattica
    • Istruzione
    • Giochi Didattici
    Tutto in Educazione >
  • Videogame
    • Arcade
    • Avventura
    • Azione
    • Board
    • Carte
    • Giochi di ruolo
    • Giochi Online
    • Puzzle e Enigmistica
    • Simulazione
    • Sparatutto
    • Sport
    • Strategia e Giochi di Guerra
    • Tempo Libero
    Tutto in Videogame >
  • Grafica
    • Accessori & Mappe
    • Animazione
    • CAD – 3D
    • Cattura schermo
    • Convertitori e ridimensionatori
    • Editor
    • Flash
    • Font
    • Ritocco
    • Gallerie e album
    • Icone e loghi
    • Visualizzatori
    Tutto in Grafica >
  • Internet
    • Browser
    • Chat e IM
    • eMail
    • Estensioni & Temi
    • FTP
    • Network
    • News e RSS
    • Peer to Peer
    • Webcam
    Tutto in Internet >
  • Programmazione
    • Accessori
    • CMS e E-Commerce
    • Editor e Compilatori
    • Editor e strumenti Web
    • Linguaggi
    Tutto in Programmazione >
  • Sicurezza
    • Antispam
    • Antispyware
    • Antivirus
    • Server
    Tutto in Sicurezza >
  • Produttività
    • Backup
    • Compressione
    • Connettività
    • Database
    • Fax e Telefonia
    • Gestione disco
    • Ottimizzazione
    • Ufficio
    • Utilità di Sistema
    Tutto in Produttività >
  • Auto
    • Accessori Auto
    • Gare
    • Utility
    Tutto in Produttività >
  • Casa
    • Home Design
    • Home Security
    • IoT
    • Progettazione
    • Smart Home
    Tutto in Produttività >
Notizie
Video
Forum
in  
Trend
GuideHTMLJavaLinguaggio CPythonJavaScriptPHPC++CSSAndroidApprofondimenti
INDICE DELLA GUIDA
Primi passi con Android
  1. 1 Introduzione: perché Android

  2. 2 L'SDK e l'ambiente di sviluppo

  3. 3 Come sviluppare app Android: ibrido o nativo?

  4. 4 Gli elementi e il funzionamento di base di un'applicazione

  5. 5 Il ciclo di vita di un'app Android

  6. 6 La prima app Android con Eclipse

  7. 7 Android Studio: creare un'app Android

Il cuore di un’app Android
  1. 8 Activity, la "prima pagina" dell'applicazione

  2. 9 Il ciclo di vita di un'Activity

  3. 10 Gestire le risorse e gli asset

  4. 11 Intent e messaggi

  5. 12 Le permission

L’interfaccia grafica (GUI)
  1. 13 Il layout di un'app Android

  2. 14 Definire layout in XML, il markup di base

  3. 15 View: le basi dell'interfaccia grafica

  4. 16 Controlli utente

  5. 17 Creare un menu

  6. 18 ActionBar

  7. 19 Le notifiche in Android

  8. 20 Notifiche: Toast e Dialog

  9. 21 Visualizzare pagine Web: WebView

  10. 22 ListView e GridView

  11. 23 Spinner (menu a tendina)

  12. 24 Stili e temi

  13. 25 Creare Custom Adapter

  14. 26 Fragment in Android

  15. 27 Layout adattabili Smartphone/Tablet in Android

Lo storage
  1. 28 Gestire i file

  2. 29 Memorizzare informazioni con SharedPreferences

  3. 30 Database e SQLite

  4. 31 Condividere i dati con i Content Provider

  5. 32 Accedere a ContentProvider

  6. 33 Gestire i dati con Realm

Processi e servizi
  1. 34 Threading

  2. 35 Lavoriamo in backgroud con i Service

Android e il networking
  1. 36 Accedere alla Rete con Volley

  2. 37 Servizi REST su Android

Hardware e sensori
  1. lezione
    38 di 96

    Sensori e SensorManager in Android

  2. 39 Geolocalizzazione con Android

  3. 40 Accelerometro: come utilizzarlo

  4. 41 Touchscreen ed eventi Touch

  5. 42 Multitouch

  6. 43 Rilevare le gesture

  7. 44 Bluetooth

  8. 45 NFC

  9. 46 Fingerprint API

Multimedia
  1. 47 Scattare una foto

  2. 48 Registrare un video

  3. 49 MediaPlayer: riprodurre file audio

  4. 50 MediaPlayer: riprodurre file video

  5. 51 Gestire l'audio

  6. 52 Android e la low latency

  7. 53 Leggere codici a barre e QR code

  8. 54 Face Detection

Grafica
  1. 55 Animazioni con XML

  2. 56 Supporto multirisoluzione

  3. 57 Animazioni con ViewPropertyAnimator

  4. 58 Accelerazione hardware

Telefono
  1. 59 Gestire gli SMS

  2. 60 Elenco delle chiamate: la gestione in Android

  3. 61 Chiamare ed intercettare una chiamata

  4. 62 Gestire i Contatti

Testing delle app
  1. 63 Test delle app

  2. 64 Test con JUnit

  3. 65 Unit Test con Hamcrest

  4. 66 Test delle interfacce utente

  5. 67 Test delle interfacce con Espresso

Pubblicare un’app
  1. 68 AndroidManifest.xml e le capabilities

  2. 69 Preparare l'app per la pubblicazione

  3. 70 Iscrizione a Google e invio dell'app

  4. 71 Market alternativi

  5. 72 Modelli di Monetizzazione

Android Architecture Components
  1. 73 Android Architecture Components

  2. 74 Lifecycle

  3. 75 ViewModel e LiveData

  4. 76 ViewModel: un esempio pratico

  5. 77 Room: ORM su SQLite

  6. 78 Architettura unica con Room, ViewModel e LiveData

Appendice
  1. 79 Riepilogo: Controlli Utente

  2. 80 L'Application Context

  3. 81 Gestione dell'input: un esempio

  4. 82 Applicazioni di rete: un RSS reader

  5. 83 Esecuzione e debug su Eclipse ADT

  6. 84 Eseguire test sull'emulatore e sullo smartphone

  7. 85 Android e la rete

  8. 86 Consumare servizi REST da Android

  9. 87 Debug di applicazioni Android

  10. 88 App Widget

  11. 89 Integrare Github in Android Studio

  12. 90 Creare librerie Android

  13. 91 Adaptive Icons

  14. 92 Android e Java 8

  15. 93 Bluetooth Low Energy (BLE)

  16. 94 Leggere dati in formato JSON

  17. 95 App shortcuts

  18. 96 Instant app

  • Learn
  • Guida Android
  • Sensori e SensorManager in Android
lezione
38 di 96

Sensori e SensorManager in Android

  • di Giuseppe Maggi
  • 3 Settembre 2014

Molto spesso giocando, usando applicazioni o semplicemente tenendo in mano un device ci è capitato di notare che il dispositivo “si accorge” di una serie di fattori ed eventi fisici: se lo giriamo, se lo scuotiamo e via dicendo.

Altre volte si può essere rimasti stupiti notando che alcune app forniscono informazioni sull’ambiente in cui ci troviamo. Percepiscono magari temperatura, umidità, luminosità.

“Ma come fa a saperlo?”: la domanda nasce spontanea.

Questo capitolo vuole mostrare che queste funzionalità non celano magie ma un po’ di elettronica amalgamata con software ben fatto.

I dispositivi Android grazie ai sensori di cui sono forniti riescono a percepire movimenti, condizioni ambientali e lo faranno sempre più e sempre con maggiore precisione grazie all’ampliamento costante di queste tecnologie. A noi spetta la parte, se vogliamo, più divertente di tutto questo: leggere facilmente queste informazioni con le API del framework e usarle per arricchire le nostre app.

Classificazione dei sensori

Iniziamo con un po’ di classificazioni. Innanzitutto, i sensori possono essere suddivisi in tre grandi gruppi:

  • sensori di movimento: percepiscono le forze fisiche che agiscono sul dispositivo. Ad esempio, l’accelerometro, il giroscopio, sensore di gravità;
  • sensori ambientali: rilevano particolari dell’ambiente in cui ci si trova: temperatura, pressione, umidità;
  • sensori di posizione: raccolgono dati sulla posizione del dispositivo, ad esempio il sensore di orientamento.

Inoltre, i sensori, dipendentemente dal modo in cui sono implementati, possono essere hardware o software. I primi corrispondono a dei veri e propri elementi elettronici inseriti nel dispositivo. I secondi sono delle elaborazioni basate sui dati raccolti dai sensori hardware. Quelli software sono chiamati anche virtuali in quanto possono essere consultati con lo stesso interfacciamento di quelli hardware dissimulando quindi la loro natura software.

Alcuni sensori devono essere necessariamente hardware, altri esistono solo software mentre alcuni possono essere hardware o software a seconda dell’implementazione che è stata scelta per il particolare dispositivo.

Il SensorManager

Come in molte altre situazioni, il sottosistema Android che vogliamo sfruttare ci viene dischiuso da un system service, accessibile mediante una classe “manager”.

In questo caso, si tratta del SensorManager.

Per ottenerne un riferimento, procediamo ad un passo ormai di rito:


private SensorManager mSensorManager;
. . .
. . .
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

La prima cosa che può essere utile fare con il SensorManager è chiedergli un inventario dei sensori disponibili nel nostro dispositivo.

Usando una serie di costanti intere (tutte ben spiegate nella documentazione ufficiale) si può chiedere una lista dei sensori:


<Sensor> sensors=mSensorManager.getSensorList(Sensor.TYPE_ALL);

oppure verificare se un sensore è disponibile:


Sensor ss=mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

Un po’ tutti i dispositivi avranno a disposizione almeno tre o quattro sensori essenziali per la vita di uno smartphone tra cui accelerometro, orientamento e rotazione.

Leggere dati da un sensore

La prassi comune per ricevere dati periodici da un sensore è registrare un listener nella nostra applicazione. Ciò, da un punto di vista sintattico, obbligherà all’implementazione di un metodo di callback all’interno del quale si potrà fare un qualche uso delle misurazioni rilevate.

Un tipico schema di Activity che legge dati da un sensore potrebbe essere questo:


public class MainActivity extends Activity implements SensorEventListener
{
    private SensorManager mSensorManager;
    private Sensor sensor;
    protected void onResume() {
        super.onResume();
mSensorManager.registerListener(this, sensor, 				SensorManager.SENSOR_DELAY_NORMAL);
    }
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        sensor = mSensorManager.getDefaultSensor( 
		/*
		 * Costante relativa al sensore da monitorare 
		 * */
                );
	}
	@Override
	public void onSensorChanged(SensorEvent event) 
	{
		/*
		 * Codice di gestione dei nuovi eventi del sensore
		 * */
	}
	@Override
	public void onAccuracyChanged(Sensor s, int i) 
	{
	}
}

Gli aspetti da notare maggiormente sono:

  • nel metodo onCreate è stato prelevato un riferimento al SensorManager. Opzionalmente questo punto sarà buono per recuperare un riferimento anche al sensore specifico con cui si vuole interagire;
  • nei metodi onPause e onResume che come sappiamo regolano l’inizio e la fine dell’interazione tra Activity e utente avviene, rispettivamente, la registrazione e la cancellazione del listener;
  •  l’activity implementa l’interfaccia SensorEventListener che forza all’override di due metodi onAccuracyChanged e onSensorChanged.

Il metodo onSensorChanged costituisce il cuore dell’interazione con il sensore. È qui che arrivano le chiamate del listener ogni volta che sono disponibili nuove misurazioni. L’evento notificato verrà formalizzato con un oggetto di classe SensorEvent.

SensorEvent permette di leggere i valori recuparati come un array numerico. Il tutto visto in questo modo potrebbe sembrare semplice. La difficoltà sta proprio nell’interpretare e sfruttare i valori dell’evento. Essendo i sensori dei misuratori di grandezza fisiche, i dati letti con essi dovrebbero essere sottoposti ad opportune valutazioni nel rispetto, eventualmente, di leggi scientifiche. In un capitolo successivo, si avrà modo di sperimentare l’accelerometro ed in quel caso dovremo interpretare delle accelerazioni.

Se vuoi aggiornamenti su Android, mobile inserisci la tua e-mail nel box qui sotto:

Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi:

39 / 96

Geolocalizzazione con Android

Ultime notizie

Google Cloud Services Platform in beta

Cybersecurity: nelle aziende manca una cultura della sicurezza

Marzipan: App universali per iOS e MacOS?

Pagina 404: l’importanza del design

(In)sicurezza dei Password manager

I Video di HTML.it

Ubuntu 12.10: le novità in un video – Parte 1

Percorsi formativi correlati
Android Mobile Developer

Android Mobile Developer

5
guide
250 ore

Tutti i linguaggi per diventare uno sviluppatore di app per Android.

DB Administrator

DB Administrator

4
guide
80 ore

Come creare applicazioni per il Web con PHP e MySQL per il DBMS.

iOS Mobile Developer

iOS Mobile Developer

4
guide
180 ore

Tutte le principali tecnologie per diventare uno sviluppatore mobile per iOS.

Java Developer

Java Developer

7
guide
300 ore

I fondamentali per lo sviluppo di applicazioni multi piattaforma con Java.

Java Security Expert

Java Security Expert

5
guide
120 ore

Diventare degli esperti in tema di sicurezza delle applicazioni Java.

Maker

Maker

2
guide
50 ore

Usare Raspberry Pi e Arduino per avvicinarsi al mondo dei Maker e dell’IoT.

NoSQL DB Expert

NoSQL DB Expert

5
guide
200 ore

Le principali guide di HTML.it per diventare un esperto dei database NoSQL.

PHP Cloud Developer

PHP Cloud Developer

7
guide
80 ore

Ecco come i professionisti creano applicazioni per il Cloud con PHP.

PHP Developer

PHP Developer

5
guide
100 ore

Lo sviluppo professionale di applicazioni in PHP alla portata di tutti.

PHP e JavaScript Developer

PHP e JavaScript Developer

6
guide
100 ore

Come sviluppare applicazioni Web dinamiche con PHP e JavaScript.

PHP Framework Expert

PHP Framework Expert

6
guide
120 ore

Realizzare applicazioni per il Web utilizzando i framework PHP.

PHP SysAdmin

PHP SysAdmin

6
guide
80 ore

Creare applicazioni PHP e gestire l’ambiente di sviluppo come un pro.

Sviluppare un eCommerce con PHP

Sviluppare un eCommerce con PHP

5
guide
120 ore

Fare gli eCommerce developer con Magento, Prestashop e WooCommerce.

Web &amp; Mobile Designer

Web & Mobile Designer

5
guide
300 ore

Percorso base per avvicinarsi al web design con un occhio al mobile.

WordPress Developer

WordPress Developer

5
guide
150 ore

Realizzare siti Web e Web application con WordPress a livello professionale.

Ti consigliamo anche

App Java per Android: librerie per ogni esigenza

  • 20 Lezioni
  • Avanzata

Guida pratica su alcune delle più note librerie open source realizzate in Java e scritte per affrontare le più frequenti problematiche nello sviluppo di applicazioni per Android.

  • Java: Local-Variable Type Inference
  • MongoDB: gestione database con Java

Virtual Reality con Android e Google Cardboard

Guida pratica all'implementazione di un'app per Android in grado di sfruttare le funzionalità messe a disposizione per la realtà virtuale.

  • Android Studio 3.3 e promesse mancate
  • Ubuntu Touch OTA-6

Google Play Store apre alle Progressive Web App

Kotlin è il linguaggio di riferimento per Android (per Google)

Android: termine del supporto per le App a 32bit entro il 2021

  • Guide
  • Approfondimenti
  • Script
  • Q&A
  • Software
  • Tutorial
  • Videogiochi
  • Tag Software
  • News
  • Video
  • Forum
  • Chi siamo
  • Pubblicità
  • Contatti
  • Cookie policy
  • Privacy policy
  • Privacy Policy Newsletter
© HTML.it 1997-2019 | Triboo Media – P. IVA 06933670967 | HTML.it è un periodico telematico reg. Trib. Roma n. 309/2008 | 2.10.3