Taula de continguts

Sensors de moviment d'Android

eixos-accelerometre.jpg

Referències:

, , , , , , , , ,


Sensors

Quan parlem de «sensors» en Android solem referir-nos als de moviment: l'acceleròmetre i el giroscopi (brúixola 3D).

També son sensors (però no de moviment) la càmera, el micro, la pantalla tàctil i el GPS.

Si mirem la documentació oficial podrem veure que la llibreria Android disposa dels següents deteccions:

Els dos darrers son les dades «en cru» tal i com arriben dels sensors. Els altres son mecanismes de la llibreria per facilitar-nos la programació.

Exemple amb dades de l'acceleròmetre

MainActivity.java
public class MainActivity extends AppCompatActivity {
 
    private SensorManager sensorManager;
    private Sensor sensor;
    SensorEventListener sensorListener;
 
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        sensorListener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {
                // Valors de l'acceleròmetre en m/s^2
                float xAcc = sensorEvent.values[0];
                float yAcc = sensorEvent.values[1];
                float zAcc = sensorEvent.values[2];
 
                // Processament o visualització de dades...
            }
 
            @Override
            public void onAccuracyChanged(Sensor sensor, int i) {
                // Es pot ignorar aquesta CB de moment
            }
        };
 
        // Seleccionem el tipus de sensor (veure doc oficial)
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);        
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 
        // registrem el Listener per capturar els events del sensor
        if( sensor!=null ) {
            sensorManager.registerListener(sensorListener,sensor,
                    SensorManager.SENSOR_DELAY_NORMAL);
        }
    }
}


Exercici

Implementa una app que visualitzi els valors de l'acceleròmetre seguint l'exemple anterior on emprem el Sensor.TYPE_ACCELEROMETER. Tens unes captures de pantalla més a baix de com pots fer la app.

Compara amb el resultat de Sensor.TYPE_LINEAR_ACCELERATION. Quina diferència veus?

Llença l'app al teu dispositiu mòbil.

Com has de col·locar el mòbil per aconseguir aquests valors (aproximats)?:

tapapp1.jpg tapapp2.jpg tapapp3.jpg

Double tap

Intenta implementar un detector de «double tap». No ha de reaccionar amb 1 sol «tap» ni tampoc si ens desplacem ràpid o fem una sola sacsejada del mòbil.