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); } }
- Android Layouts (ViewGroups) – (Parte 1 – LinearLayout)
- Android Firebase – Login
- Android – Location Update
- Android ListActivity – (Parte 1 – ListActivity)
- Android ListActivity – (Parte 2 – ListView)