Android – Sensor Acelerômetro

Android – Location Update

Esta lição demonstra como utilizar o sensor acelerômetro. O acelerômetro é um componente eletrônico que mede a inclinação e movimento. Ele também é capaz de detectar o movimento de rotação e gestos tais como balançar ou agitar um dado aparelho eletrônico do qual ele faz parte.

A plataforma Android suporta três grandes categorias de sensores:

Sensores de movimento: Esses sensores medem forças de aceleração e forças de rotação ao longo de três eixos. Esta categoria inclui acelerômetros, sensores de gravidade, giroscópios e sensores vetoriais rotacionais.

Sensores ambientais: Esses sensores medem vários parâmetros ambientais, como temperatura e pressão do ar ambiente, iluminação e umidade. Esta categoria inclui barômetros, fotômetros e termômetros.

Sensores de posição: Esses sensores medem a posição física de um dispositivo. Esta categoria inclui sensores de orientação e magnetômetros.

1- Crie um projeto Empty novo chamado ExemploAcelerometro com uma classe chamada MainActivity.

3- Adicione ao layout três TextView para as coordenadas x, y e z, um Button para e outro TextView para exibir todos os sensores que existem no dipositivo.

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Valor x:"/>

        <TextView
            android:id="@+id/tvValorX"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Valor y:"/>

        <TextView
            android:id="@+id/tvValorY"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Valor Z:"/>

        <TextView
            android:id="@+id/tvValorZ"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:text="Meus sensores"
            android:onClick="btMeusSensoresOnClick"/>

        <TextView
            android:id="@+id/tvListaSensores"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""/>

    </LinearLayout>

</android.support.constraint.ConstraintLayout>


3- No método OnCreate SensorManager permite acessar os sensores do dispositivo. Em seguida o método getDefaultSensor obtém o sensor do tipo Acelerômetro.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvValorX = (TextView) findViewById( R.id.tvValorX );
        tvValorY = (TextView) findViewById( R.id.tvValorY );
        tvValorZ = (TextView) findViewById( R.id.tvValorZ );

        mSensorManager = (SensorManager)
                getSystemService(SENSOR_SERVICE);
        mAcelerometro = mSensorManager
                .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }

4- No método onSensorChanged é chamado quando há um novo evento de sensor, neste caso está passando os valores das coordenadas x, y e z para a tela.

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

        tvValorX.setText( String.valueOf( x ) );
        tvValorY.setText( String.valueOf( y ) );
        tvValorZ.setText( String.valueOf( z ) );

    }

5- No clique do botão “MEUS SENSORES” será exibido todos os sensores que possuem no smartphone. Isso irá ocorrer porque o filtro dos sensores foi Sensor.TYPE_ALL.

public void btMeusSensoresOnClick(View v) {
        List<Sensor> listaSensores = mSensorManager
                .getSensorList(Sensor.TYPE_ALL);
        String[] lista = new String[listaSensores.size()];

        for (int i = 0; i < listaSensores.size(); i++){
            lista[i] = listaSensores.get(i).getName();
        }

        TextView tvListaSensores = (TextView) findViewById(R.id.tvListaSensores);
        String stringUnica = Arrays.toString(lista);
        tvListaSensores.setText(stringUnica);


    }

5- Seque o código completo. Compile e teste.

package com.example.totemarcal.exemploacelerometro;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private TextView tvValorX;
    private TextView tvValorY;
    private TextView tvValorZ;

    private SensorManager mSensorManager;
    private Sensor mAcelerometro;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvValorX = (TextView) findViewById( R.id.tvValorX );
        tvValorY = (TextView) findViewById( R.id.tvValorY );
        tvValorZ = (TextView) findViewById( R.id.tvValorZ );

        mSensorManager = (SensorManager)
                getSystemService(SENSOR_SERVICE);
        mAcelerometro = mSensorManager
                .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }


    @Override
    protected void onResume(){
        super.onResume();
        mSensorManager.registerListener(this, mAcelerometro,
                SensorManager.SENSOR_DELAY_UI);
    }

    @Override
    protected void onPause(){
        super.onPause();
        mSensorManager.unregisterListener(this);
    }

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

        tvValorX.setText( String.valueOf( x ) );
        tvValorY.setText( String.valueOf( y ) );
        tvValorZ.setText( String.valueOf( z ) );

    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    public void btMeusSensoresOnClick(View v) {
        List<Sensor> listaSensores = mSensorManager
                .getSensorList(Sensor.TYPE_ALL);
        String[] lista = new String[listaSensores.size()];

        for (int i = 0; i < listaSensores.size(); i++){
            lista[i] = listaSensores.get(i).getName();
        }

        TextView tvListaSensores = (TextView) findViewById(R.id.tvListaSensores);
        String stringUnica = Arrays.toString(lista);
        tvListaSensores.setText(stringUnica);


    }
}


Deixe uma resposta

Specify Google Client ID and Secret in Super Socializer > Social Login section in admin panel for Google Login to work

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *