android e sensori

15
Android e sensori Il mondo percepito dallo smartphone

Upload: vincenzo-virgilio

Post on 21-Jul-2015

40 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Android e sensori

Android e sensori

Il mondo percepito dallo smartphone

Page 2: Android e sensori

Quali sono?

• Accelerometro;

• Temperatura ambiente;

• Gravità;

• Giroscopio;

• Luce;

• Accelerazione lineare;

• Campo magnetico;

• Orientamento;

• Pressione;

• Prossimità

• Umidità relativa;

• Vettore di rotazione;

• Temperatura.

Page 3: Android e sensori

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.

Page 4: Android e sensori

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);

Page 5: Android e sensori

SensorManager

• Classe che permette di ottenere istanze di sensori, registrare/stoppare un callback e altro.

SensorManager sManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

Page 6: Android e sensori

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.

Page 7: Android e sensori

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.

Page 8: Android e sensori

Acquisizione dati

Si acquisiscono attraverso due metodi dell'interface SensorEventListener:

1. onAccuracyChanged(Sensor sensor, in accuracy);

2. onSensorChanged(SensorEvent event);

Page 9: Android e sensori

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

Page 10: Android e sensori

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

Page 11: Android e sensori

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.

Page 12: Android e sensori

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);

Page 13: Android e sensori

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); } }

Page 14: Android e sensori

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 } }

Page 15: Android e sensori

@Override public final void onSensorChanged(SensorEvent event) { switch(event.sensor.getType()){ case Sensor.TYPE_ACCELEROMETER: break; case Sensor.TYPE_PROXIMITY: break; } }