
Oggi vedremo come gestire il sensore dell’accelerometro su Android, e come visualizzarne i valori.
Creiamo quindi come sempre un File->New->AndroidApplicationProject e chiamiamolo Accelerometro (si scrive con una L sola!! ).
Ci serviranno 3 view per mostrare rispettivamente il valore X, Y e Z dell’accelerometro.
Per questo scopo saranno perfette delle TextView: disponiamo quindi verticalmente nel nostro layout 3 elementi Large Text (si trovano in Form Widgets). Cambiamogli il valore di default (il campo Text a destra) se vogliamo, ma soprattutto il campo id, in modo da identificarle più facilmente in java. Per questo esempio abbiamo scelto di chiamarle TextViewX, TextViewY e TextViewZ.
A questo punto spostiamoci nel file MainActivity.java e scriviamo il seguente codice:
public class MainActivity extends Activity implements SensorEventListener{ private SensorManager sensorManager; TextView text_X; TextView text_Y; TextView text_Z; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorManager.registerListener(this, sensorManager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER ),SensorManager.SENSOR_DELAY_NORMAL ); //Collegamento con le textView del layout text_X=(TextView)findViewById(R.id.textViewX); text_Y=(TextView)findViewById(R.id.textViewY); text_Z=(TextView)findViewById(R.id.textViewZ); } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { //L'accelerometro ha cambiato stato mostraValori(event); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } private void mostraValori(SensorEvent event){ float[] valori=event.values;//array che contiene i valori dell'accelerometro //modifica del valore delle textView text_X.setText("Valore X: "+valori[0]); text_Y.setText("Valore Y: "+valori[1]); text_Z.setText("Valore Z: "+valori[2]); } }
Notiamo intanto nella dichiarazione della classe il codice implements SensorEventListener: Significa che questa classe dovrà “ascoltare” eventuali variazioni dello stato dei sensori e comportarsi di conseguenza. Come nel caso della Camera (vedi Lezione9 e Lezione10) dovremo implementare 2 metodi specifici, e cioè onSensorChanged (richiamato quando cambia il valore del sensore) e onAccuracyChanged (che a noi non serve, ma che dobbiamo comunque implementare, ma possiamo lasciarlo vuoto). Quindi quando muoveremo il nostro dispositivo verrà invocato il metodo mostraValori, nel quale estrapoliamo da event 3 valori (relativi ai campi X,Y e Z) e modifichiamo il testo delle view per mostrare lo stato del nostro accelerometro.
La nostra lezione si conclude qui: potete però utilizzarla come base per creare applicazioni più complesse integrando anche le lezioni precedenti. Potrete ad esempio decidere di far partire un suono quando il dispositivo viene inclinato, oppure far partire un animazione (ad esempio una palla che rotola per effetto della gravità) , accendere la torcia, ecc…
Puoi guardare tutte le lezioni passate consultando l’indice del corso di programmazione android