SlideShare a Scribd company logo
1 of 15
Download to read offline
Android e sensori
Il mondo percepito dallo smartphone
Quali sono?
• Accelerometro;
• Temperatura ambiente;
• Gravità;
• Giroscopio;
• Luce;
• Accelerazione lineare;
• Campo magnetico;
• Orientamento;
• Pressione;
• Prossimità
• Umidità relativa;
• Vettore di rotazione;
• Temperatura.
Classificazione
• Sensori di movimento:
– accelerometro, gravità, giroscopio, accelerazione
lineare.
• Sensori ambientali:
– temperatura ambiente, luce, pressione, umidità
relativa, temperatura.
• Sensori di posizione:
– campo magnetico, orientamento, prossimità,
vettore di rotazione.
Alcune considerazioni
• A seconda del dispositivo possono esserci altri
sensori (esempio, Galaxy note 4 e il sensore
raggi UV);
• Recenti API hanno introdotto sensori legati al
benessere (battito cardiaco) o al movimento
dell'utente (step);
SensorManager
• Classe che permette di ottenere istanze di
sensori, registrare/stoppare un callback e
altro.
SensorManager sManager =
(SensorManager)getSystemService(Context.SENSOR_SERVICE);
Ottenere i sensori
• Ottenere tutti i sensori disponibili:
– List<Sensor> deviceSensors = sManager.getSensorList(Sensor.TYPE_ALL);
• Ottenere un sensore specifico:
– Sensor sensor = sManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
– Se ritorna null il dispositivo non supporta il sensore.
Metodi utili della classe Sensor
• getResolution(): risoluzione del sensore, ritorna un float;
• getMaximumRange(): messimo range del sensore, ritorna un float;
• getPower(): energia usata dal sensore in mA, ritorna un float;
• getVendor(): ritorna una stringa che identifica il produttore del sensore;
• getVersion(): ritorna un intero che rappresenta la versione del sensore.
• getMinDelay(): ritorna un intero che rappresenta il tempo minimo tra una
registrazione e l'altra, o 0 se il sensore registra un valore solo quanto
questo cambia.
Acquisizione dati
Si acquisiscono attraverso due metodi
dell'interface SensorEventListener:
1. onAccuracyChanged(Sensor sensor, in
accuracy);
2. onSensorChanged(SensorEvent event);
onAccuracyChanged
Monitora cambiamenti di precisione del sensore.
1. Sensor sensor: sensore su cui si registra un
cambiamento di precisione.
2. Int accuracy: può assumere 4 valori, espressi dalle
costanti:
1. SENSOR_STATUS_ACCURACY_LOW
2. SENSOR_STATUS_ACCURACY_MEDIUM
3. SENSOR_STATUS_ACCURACY_HIGH
4. SENSOR_STATUS_UNRELIABLE
onSensorChanged
Viene chiamato quando il sensore registra un
nuovo valore.
1. SensorEvent: un oggetto contente tutte le
informazioni necessarie:
1. Il sensore che ha registrato il valore
2. La precisione del valore
3. Timestamp
4. Il valore
SensorEvent
• sensorEvent.values[n]: array float contenente
i valori registrati dal sensore
• sensorEvent.sensor: ritorna l'oggetto Sensor
che ha fatto registrare la variazione.
• sensorEvent.sensor.getType(): ritorna un
intero riferito al tipo di sensore.
Avvio e arresto del monitoraggio
Si effettuano attraverso metodi di SensorManager:
• registerListener(Context context, Sensor
sensor, int maxReportLatencyUs);
• unregisterListener(SensorEventListener listener,
Sensor sensor);
• unregisterListener(SensorEventListener listener);
public class SensorActivity extends Activity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mLight;
@Override
public final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
@Override
public final void onAccuracyChanged(Sensor sensor, int accuracy) {}
@Override
public final void onSensorChanged(SensorEvent event) {
float lux = event.values[0];
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
}
Dopo una calibrazione dove:
• minValue = valore minimo della somma
• maxValue = valore massimo della somma
Registro il sensore di accelerazione lineare e:
@Override
public final void onSensorChanged(SensorEvent event) {
accX=Math.abs(event.values[0]);
accY=Math.abs(event.values[1]);
accZ=Math.abs(event.values[2]);
double sum = accX+accY+accZ;
if(sum>=minValue && sum<=maxValue){
//Dispositivo fermo
}
}
@Override
public final void onSensorChanged(SensorEvent event) {
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
break;
case Sensor.TYPE_PROXIMITY:
break;
}
}

More Related Content

Viewers also liked

Bakso meteor
Bakso meteorBakso meteor
Bakso meteornaylaupi
 
Ristiani pertiwi 12.03.4095 (tugas 9)
Ristiani pertiwi 12.03.4095 (tugas 9)Ristiani pertiwi 12.03.4095 (tugas 9)
Ristiani pertiwi 12.03.4095 (tugas 9)Ristiani Pertiwi
 
EMCC Ireland National Conference 2015
EMCC Ireland National Conference 2015EMCC Ireland National Conference 2015
EMCC Ireland National Conference 2015EMCC Ireland
 
Laughter & Silence Spiritual Retreat and Laughter Yoga Summit in New York
Laughter & Silence Spiritual Retreat and Laughter Yoga Summit in New YorkLaughter & Silence Spiritual Retreat and Laughter Yoga Summit in New York
Laughter & Silence Spiritual Retreat and Laughter Yoga Summit in New YorkLaughter Yoga University
 
Fairwood Studios & The Single Point of Failure (FailPDX 2/15)
Fairwood Studios & The Single Point of Failure (FailPDX 2/15)Fairwood Studios & The Single Point of Failure (FailPDX 2/15)
Fairwood Studios & The Single Point of Failure (FailPDX 2/15)Zoe Landon
 
La disponibilita dei dati in azienda strategie di protezione
La disponibilita dei dati in azienda strategie di protezioneLa disponibilita dei dati in azienda strategie di protezione
La disponibilita dei dati in azienda strategie di protezioneVincenzo Virgilio
 

Viewers also liked (11)

Bakso meteor
Bakso meteorBakso meteor
Bakso meteor
 
Ristiani pertiwi 12.03.4095 (tugas 9)
Ristiani pertiwi 12.03.4095 (tugas 9)Ristiani pertiwi 12.03.4095 (tugas 9)
Ristiani pertiwi 12.03.4095 (tugas 9)
 
EMCC Ireland National Conference 2015
EMCC Ireland National Conference 2015EMCC Ireland National Conference 2015
EMCC Ireland National Conference 2015
 
GWMS 2015 open house
GWMS 2015 open houseGWMS 2015 open house
GWMS 2015 open house
 
Slide windows no grazie
Slide windows no grazieSlide windows no grazie
Slide windows no grazie
 
Laughter & Silence Spiritual Retreat and Laughter Yoga Summit in New York
Laughter & Silence Spiritual Retreat and Laughter Yoga Summit in New YorkLaughter & Silence Spiritual Retreat and Laughter Yoga Summit in New York
Laughter & Silence Spiritual Retreat and Laughter Yoga Summit in New York
 
Progetto quadricottero 1
Progetto quadricottero 1Progetto quadricottero 1
Progetto quadricottero 1
 
Android insecurity
Android insecurityAndroid insecurity
Android insecurity
 
Fairwood Studios & The Single Point of Failure (FailPDX 2/15)
Fairwood Studios & The Single Point of Failure (FailPDX 2/15)Fairwood Studios & The Single Point of Failure (FailPDX 2/15)
Fairwood Studios & The Single Point of Failure (FailPDX 2/15)
 
Arduino galileo edison_udoo
Arduino galileo edison_udooArduino galileo edison_udoo
Arduino galileo edison_udoo
 
La disponibilita dei dati in azienda strategie di protezione
La disponibilita dei dati in azienda strategie di protezioneLa disponibilita dei dati in azienda strategie di protezione
La disponibilita dei dati in azienda strategie di protezione
 

More from Vincenzo Virgilio

More from Vincenzo Virgilio (10)

Arduino Tre reference
Arduino Tre referenceArduino Tre reference
Arduino Tre reference
 
Theremino
ThereminoTheremino
Theremino
 
Arduino starterkit
Arduino starterkitArduino starterkit
Arduino starterkit
 
Arduino day2015 Libertà a scuola
Arduino day2015 Libertà a scuolaArduino day2015 Libertà a scuola
Arduino day2015 Libertà a scuola
 
Telemetria dei parametri dinamici di un drone marino paolo ferrara
Telemetria dei parametri dinamici di un drone marino paolo ferraraTelemetria dei parametri dinamici di un drone marino paolo ferrara
Telemetria dei parametri dinamici di un drone marino paolo ferrara
 
Telemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marinoTelemetria dei parametri dinamici di un drone marino
Telemetria dei parametri dinamici di un drone marino
 
Google per la formazione
Google per la formazioneGoogle per la formazione
Google per la formazione
 
Bpm 2015 03-21-v1
Bpm 2015 03-21-v1Bpm 2015 03-21-v1
Bpm 2015 03-21-v1
 
Badusb shot
Badusb shotBadusb shot
Badusb shot
 
Arduino tre tomcat
Arduino tre tomcatArduino tre tomcat
Arduino tre tomcat
 

Android e sensori

  • 1. Android e sensori Il mondo percepito dallo smartphone
  • 2. Quali sono? • Accelerometro; • Temperatura ambiente; • Gravità; • Giroscopio; • Luce; • Accelerazione lineare; • Campo magnetico; • Orientamento; • Pressione; • Prossimità • Umidità relativa; • Vettore di rotazione; • Temperatura.
  • 3. Classificazione • Sensori di movimento: – accelerometro, gravità, giroscopio, accelerazione lineare. • Sensori ambientali: – temperatura ambiente, luce, pressione, umidità relativa, temperatura. • Sensori di posizione: – campo magnetico, orientamento, prossimità, vettore di rotazione.
  • 4. Alcune considerazioni • A seconda del dispositivo possono esserci altri sensori (esempio, Galaxy note 4 e il sensore raggi UV); • Recenti API hanno introdotto sensori legati al benessere (battito cardiaco) o al movimento dell'utente (step);
  • 5. SensorManager • Classe che permette di ottenere istanze di sensori, registrare/stoppare un callback e altro. SensorManager sManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
  • 6. Ottenere i sensori • Ottenere tutti i sensori disponibili: – List<Sensor> deviceSensors = sManager.getSensorList(Sensor.TYPE_ALL); • Ottenere un sensore specifico: – Sensor sensor = sManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); – Se ritorna null il dispositivo non supporta il sensore.
  • 7. Metodi utili della classe Sensor • getResolution(): risoluzione del sensore, ritorna un float; • getMaximumRange(): messimo range del sensore, ritorna un float; • getPower(): energia usata dal sensore in mA, ritorna un float; • getVendor(): ritorna una stringa che identifica il produttore del sensore; • getVersion(): ritorna un intero che rappresenta la versione del sensore. • getMinDelay(): ritorna un intero che rappresenta il tempo minimo tra una registrazione e l'altra, o 0 se il sensore registra un valore solo quanto questo cambia.
  • 8. Acquisizione dati Si acquisiscono attraverso due metodi dell'interface SensorEventListener: 1. onAccuracyChanged(Sensor sensor, in accuracy); 2. onSensorChanged(SensorEvent event);
  • 9. onAccuracyChanged Monitora cambiamenti di precisione del sensore. 1. Sensor sensor: sensore su cui si registra un cambiamento di precisione. 2. Int accuracy: può assumere 4 valori, espressi dalle costanti: 1. SENSOR_STATUS_ACCURACY_LOW 2. SENSOR_STATUS_ACCURACY_MEDIUM 3. SENSOR_STATUS_ACCURACY_HIGH 4. SENSOR_STATUS_UNRELIABLE
  • 10. onSensorChanged Viene chiamato quando il sensore registra un nuovo valore. 1. SensorEvent: un oggetto contente tutte le informazioni necessarie: 1. Il sensore che ha registrato il valore 2. La precisione del valore 3. Timestamp 4. Il valore
  • 11. SensorEvent • sensorEvent.values[n]: array float contenente i valori registrati dal sensore • sensorEvent.sensor: ritorna l'oggetto Sensor che ha fatto registrare la variazione. • sensorEvent.sensor.getType(): ritorna un intero riferito al tipo di sensore.
  • 12. Avvio e arresto del monitoraggio Si effettuano attraverso metodi di SensorManager: • registerListener(Context context, Sensor sensor, int maxReportLatencyUs); • unregisterListener(SensorEventListener listener, Sensor sensor); • unregisterListener(SensorEventListener listener);
  • 13. public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mLight; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) {} @Override public final void onSensorChanged(SensorEvent event) { float lux = event.values[0]; } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } }
  • 14. Dopo una calibrazione dove: • minValue = valore minimo della somma • maxValue = valore massimo della somma Registro il sensore di accelerazione lineare e: @Override public final void onSensorChanged(SensorEvent event) { accX=Math.abs(event.values[0]); accY=Math.abs(event.values[1]); accZ=Math.abs(event.values[2]); double sum = accX+accY+accZ; if(sum>=minValue && sum<=maxValue){ //Dispositivo fermo } }
  • 15. @Override public final void onSensorChanged(SensorEvent event) { switch(event.sensor.getType()){ case Sensor.TYPE_ACCELEROMETER: break; case Sensor.TYPE_PROXIMITY: break; } }