Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi....

20
Android Sensori, permessi e feature [email protected]

Transcript of Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi....

Page 1: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Android

Sensori, permessie feature

[email protected]

Page 2: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

I sensori (1)I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle applicazioni.Tali informazioni possono essere utilizzate per diversi scopi:● sistema di controllo in un gioco● realtà aumentata● geoposizionamento e mappe● etc.

Page 3: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

I sensori (2)I sensori che possono essere inclusi nei dispositivi Android sono i seguenti:● luce (light sensor)● prossimità (proximity sensor)● temperatura (temperature sensor)● pressione (pressure sensor)● accelerometro (accelerometer)● campo magnetico (magnetic field sensor)● orientamento (orientation sensor)● gravità (gravity sensor) ● rotazione (rotation vector sensor) (2.3)● nfc (near field communication sensor) (2.3)

Page 4: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Permessi e feature

Page 5: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Permessi e feature (1)uses-featureAndroid usa le feature per dichiarare la necessità di un elemento presente nel dispositivo. Google Play seleziona automaticamente le applicazioni installabili sul proprio dispositivo a seconda delle feature dichiarate.

<uses-feature android:name = "android.hardware.camera"[android:required = "true|false"] />

Il parametro android:required è opzionale è può essere true o false. Nel caso non sia presente o sia true l'applicazione verrà installata solo su un dispositivo che ha la camera.

Page 6: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Permessi e feature (2)uses-permissionPermessi richiesti all’utente in fase di installazione della app.

<uses-permission android:name = android.permission.CAMERA" />

I permessi devono essere dichiarati altrimenti l’app non funziona.Esempi di permessi:

WRITE_EXTERNAL_STORAGE (scrittura memory card)READ_CONTACTS (accesso ai contatti)ACCESS_COARSE_LOCATION (posizione approssimata: wi-fi e celle)ACCESS_FINE_LOCATION (posizione precisa: gps, wi-fi e celle)CALL_PHONE (consente le chiamate)

Page 7: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Sensori e featureNon tutti i sensori elencati sono sempre disponibili. Dipende dal modello del dispositivo. Nel manifest si può specificare quali sensori sono necessari nell'applicazione:

<uses-feature android:name = "android.hardware.sensor.proximity" />

In questo caso l'applicazione verrà installata solo su un dispositivo che ha il sensore di prossimità.

Page 8: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzo dei sensori

Page 9: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare i sensori (1)Le classi che ci servono per gestire i sensori sono: Sensor e SensorManager. L'accesso ai sensori viene fatto in maniera asincrona, in base a un tempo di delay impostato.Le operazioni sono le seguenti:

1. ottenere una istanza della classe SensorManager2. accedere al sensore mediante la classe Sensor3. impostare un Listener4. accedere ai dati, gestendo gli eventi

Page 10: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare i sensori (2)1. Ottenere una istanza della classe SensorManager

Il metodo getSystemService( ) della classe Context (superclasse di Activity) viene utilizzato per ottenere un accesso a un servizio di sistema (a esempio l'allarme, il volume, la gestione dell'audio e in questo caso anche i sensori).Il metodo ritorna un Object generico (da trasformare con il cast) e richiede una stringa che specifica il tipo si servizio richiesto:

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

Page 11: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare i sensori (3)2. Accedere al sensore mediante la classe Sensor

Definito il SensorManager lo utilizziamo per accedere al sensore specifico mediante il metodo getDefaultSensor( ):

Sensor luce = manager.getDefaultSensor(Sensor.TYPE_LIGHT );

Sensor acc = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER );

Nel primo caso accediamo al sensore di luce, nel secondo all'accelerometro.

Page 12: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare i sensori (4)3. Impostare un Listener

Impostare un Listener sul SensorManager, utilizzando il metodo registerListener( ), passandogli il listener, il Sensor e il tempo di delay che vogliamo utilizzare tra una rilevazione e l'altra (SENSOR_DELAY_FASTEST, SENSOR_DELAY_GAME, SENSOR_DELAY_UI, SENSOR_DELAY_NORMAL):

manager.registerListener(luceListener, luce, SensorManager.SENSOR_DELAY_NORMAL);

manager.registerListener(accListener, acc,SensorManager.SENSOR_DELAY_NORMAL);

Page 13: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare i sensori (5)4. Accedere ai dati, gestendo gli eventi

Creiamo il Listener dell'evento e gestiamo gli eventi onSensorChanged (quando i dati del sensore cambiano) e onAccuracyChanged (quando la precisione del sensore viene cambiata):

private SensorEventListener listener = new SensorEventListener() {

public void onSensorChanged(SensorEvent event) { }public void onAccuracyChanged(Sensor arg0, int arg1){ }

};

Page 14: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare i sensori (6)A seconda del sensore osservato, otteniamo diversi valori.

Accelerometro - possiamo accedere ai tre valori x, y e z dell'accelerometro con il seguente codice:

public void onSensorChanged(SensorEvent event) {float x = event.values[0]; float y = event.values[1]; float z = event.values[2];

}Luce - possiamo a un valore, l'intensità di luce rilevata:

public void onSensorChanged(SensorEvent event) {float luce=event.values[0];

}

Page 15: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzare il GPS

Page 16: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzo del GPS (1)Impostiamo prima di tutto i permessi e le feature nel manifest:

<uses-feature android:name="android.hardware.location.gps" android:required="false" />

<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION"/>

Utilizziamo anche qui il metodo getSystemService( ) ma questa volta lo assegnamo ad un manager di tipo LocationManager:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

Page 17: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzo del GPS (2)Impostiamo un listener con il metodo requestLocationUpdates:

manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, int millisecondi, float metri, locationListener);

Es: manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, listener)

imposta un listener sul provider gps ogni 3 secondi e ogni volta che ci si sposta di 10 metri.

// tipo provider// intervallo minimo di aggiornamento// distanza minima di aggiornamento// listener

Page 18: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzo del GPS (3)Dopodichè si crea il listener di classe LocationListener:LocationListener locationListener= new LocationListener() {

public void onStatusChanged(String provider, int status, Bundle extras) {// quando il provider ha cambiato disponibilità

}public void onProviderEnabled(String provider) {

// quando si attiva un provider }public void onProviderDisabled(String provider) {

// quando si disattiva un provider }public void onLocationChanged(Location location) {

// quando la location cambia }

};

Page 19: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Utilizzo del GPS (4)Il metodo onLocationChanged è quello che ci interessa: ci ritorna un oggetto di classe Location con le indicazioni relativa alla posizione:

public void onLocationChanged(Location location) {double longitude = location.getLongitude();double latitude = location.getLatitude();...

}

Page 20: Android - WordPress.com...I sensori (1) I dispositivi Android hanno dei sensori hardware inclusi. Tali sensori prendono informazioni dal mondo circostante e li traducono in dati nelle

Esercizio SensoriCreare un programma che permetta di rilevare la quantità di luce presente e utilizzi la variazione di tale dato per cambiare il colore di un componente.Rilevare anche i dati dell'accelerometro e quelli del gps.