como utilizar el acelerometro en android studio

Hola gente hoy veremos un nuevo tutorial de como utilizar el acelerometro en android studio esta sera una guía básica, pero muy ilustrativa.
El producto final seria como les muestro en la siguiente imagen:

acelerometro android studio

 

Como se aprecia la imagen de la aplicación nos permitirá ver los valores del acelerometro  y mostrarnos un aviso cuando se detecte ciertos movimientos.
Nota: Un acelerometro es un sensor que mide las aceleraciones relativa a la caída libre como marco de referencia.

Sin mas que decir empezamos con nuestro tutorial.

PASO 1: Diseñamos la interfaz, necesitamos  3 textview para hacer referencia que tipo de coordenada del acelerometro estamos moviéndonos y otros 3 textview para mostrar dichos valores, todo esto sera en nuestro activity_main.xml

activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.androidmorefast.pc.appacelerometro01.MainActivity">

    <TextView
        android:text="ACELEROMETRO X"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="ACELEROMETRO X"
        android:textColor="#7557C2"
        android:textSize="20dp"
        android:textColorHighlight="@color/colorAccent"
        android:layout_marginBottom="24dp"
        android:elevation="1dp"
        android:textStyle="bold"/>

    <TextView
        android:text="ACELEROMETRO Z"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView3"
        tools:text="ACELEROMETRO Z"
        android:textColor="#7557C2"
        android:textSize="20dp"
        android:textColorHighlight="@color/colorAccent"
        android:layout_marginTop="77dp"
        android:layout_below="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textStyle="bold"/>

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtAX"
        android:layout_marginTop="45dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textSize="20sp"
        android:textColor="@android:color/holo_red_dark" />

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtAZ"
        android:layout_marginTop="30dp"
        android:layout_below="@+id/textView3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textSize="20sp"
        android:textColor="@android:color/holo_red_dark" />

    <TextView
        android:text="ACELEROMETRO Y"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView2"
        tools:text="ACELEROMETRO Y"
        android:textColor="#7557C2"
        android:textSize="20dp"
        android:textColorHighlight="@color/colorAccent"
        android:layout_marginTop="30dp"
        android:layout_below="@+id/txtAX"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/text_toast"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#FFF"
        android:layout_below="@+id/txtAZ"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="88dp" />

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="34dp"
        android:id="@+id/txtAY"
        android:textSize="20sp"
        android:textColor="@android:color/holo_red_dark"
        android:layout_below="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

 

Ahora necesitamos crear otro layout llamado custom_toast para mostrar el mensaje de los movimientos, en si no seria necesario, se mostraría con un simple Toast, pero en este ejercicio he querido darle mas estilo al Toast es por eso que se necesita ese layout y quedaría de la siguiente forma:

custom_toast

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lytLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#E6003A"
    android:gravity="center"
    android:orientation="horizontal"
    android:padding="10dp" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        android:contentDescription="@string/app_name"
        android:src="@android:drawable/ic_dialog_info" />

    <TextView
        android:id="@+id/text_toast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFF" />

</LinearLayout>

 

Entonces nuestros 2 layout deben que dar como muestro en la siguiente imagen:

acelerometro

PASO 2: Ahora toca la parte de la codificación, aquí tendremos que crear las variables de nuestros textview y luego inicializarlas, en mi caso por default trabaje en la clase MainActivity.java

MainActivity

public class MainActivity extends Activity implements SensorEventListener {

    private long last_update = 0, last_movement = 0;
    private float prevX = 0, prevY = 0, prevZ = 0;
    private float curX = 0, curY = 0, curZ = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}

    @Override
    public void onSensorChanged(SensorEvent event) {
        synchronized (this) {
            long current_time = event.timestamp;

            curX = event.values[0];
            curY = event.values[1];
            curZ = event.values[2];

            if (prevX == 0 && prevY == 0 && prevZ == 0) {
                last_update = current_time;
                last_movement = current_time;
                prevX = curX;
                prevY = curY;
                prevZ = curZ;
            }

            long time_difference = current_time - last_update;
            if (time_difference > 0) {
                float movement = Math.abs((curX + curY + curZ) - (prevX - prevY - prevZ)) / time_difference;
                int limit = 1500;
                float min_movement = 1E-6f;
                if (movement > min_movement) {
                    if (current_time - last_movement >= limit) {
                        //Empieza Toast personalizado
                        Toast toast3 = new Toast(getApplicationContext());

                        LayoutInflater inflater = getLayoutInflater();
                        View layout = inflater.inflate(R.layout.custom_toast,
                                (ViewGroup) findViewById(R.id.lytLayout));

                        TextView txtMsg = (TextView)layout.findViewById(R.id.text_toast);
                        txtMsg.setText("Hay movimiento de "+movement);

                        toast3.setDuration(Toast.LENGTH_SHORT);
                        toast3.setView(layout);
                        toast3.show();
                        //finaliza Toast personalizado
                       // Toast.makeText(getApplicationContext(), "Hay movimiento de " + movement, Toast.LENGTH_LONG).show();
                    }
                    last_movement = current_time;
                }
                prevX = curX;
                prevY = curY;
                prevZ = curZ;
                last_update = current_time;
            }


            ((TextView) findViewById(R.id.txtAX)).setText("--> " + curX);
            ((TextView) findViewById(R.id.txtAY)).setText("--> " + curY);
            ((TextView) findViewById(R.id.txtAZ)).setText("--> " + curZ);

        }
    }
    @Override
    protected void onResume() {
        super.onResume();
        SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
        if (sensors.size() > 0) {
            sm.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_GAME);
        }
    }
    @Override
    protected void onStop() {
        SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        sm.unregisterListener(this);
        super.onStop();
    }

}

 

 

Bien con eso hemos terminado todo, espero les haya gustado si tiene alguna duda al respecto puede escribirme en los comentarios o enviarme un correo, recuerden que para darle una mano con sus código deben seguirme en alguna red social o subscribirte a nuestro canal de youtube.

    

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

WhatsApp chat