Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.com.paulosouzacc.tp2nicelerometer;
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.location.Location;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.widget.TextView;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- public class MainActivity extends AppCompatActivity implements SensorEventListener {
- // atributos relacionados ao acelerometro
- private SensorManager mSensorManager;
- private Sensor mSensor;
- // atributos para marcar a maior aceleracao nos eixos x, y e z
- private float bestOfX = 0, bestOfY = 0, bestOfZ = 0;
- // marcador do tempo para zerar a marcacao das maiores aceleracoes
- private long time;
- // INULTILIZADO
- // Marcacao de quantas vezes o celular foi balancado
- private int state = 0;
- // atributo com o minimo de aceleracao que o celular deve ter em algum eixo
- // para passar de estado
- private int min = -15;
- Location mLastLocation;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // Inicia o acelerometro
- mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
- mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- mSensorManager.registerListener((SensorEventListener) this, mSensor, mSensorManager.SENSOR_DELAY_FASTEST);
- }
- @Override
- protected void onResume() {
- super.onResume();
- mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
- }
- @Override
- protected void onPause() {
- bestOfX = bestOfY = bestOfZ = 0;
- super.onPause();
- mSensorManager.unregisterListener(this);
- }
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- @Override
- public void onSensorChanged(SensorEvent event) {
- // x = [0], y = [1], z = [2]
- float x, y, z;
- float sumBestOfXYZ;
- long now = System.currentTimeMillis();
- int diff;
- TextView tv = (TextView) findViewById(R.id.linear_acceleration);
- x = event.values[0];
- y = event.values[1];
- z = event.values[2];
- tv.setText(String.format("%s, %s, %s", x, y, z));
- if (x < bestOfX)
- bestOfX = x;
- if (y < bestOfY)
- bestOfY = y;
- if (z < bestOfZ)
- bestOfZ = z;
- diff = (int) (now - time);
- if (x > bestOfX || y > bestOfY || z > bestOfZ && ((x < min || y < min || z < min))) {
- state = 1;
- }
- // passa para o estado 1
- // estado 1 = a pessoa balancou o celular uma vez no espaco de tempo determinado
- if (bestOfX < min || bestOfY < min || bestOfZ < min && state == 0) {
- //time = now;
- // zera os marcadores dos sensores
- bestOfX = 0;
- bestOfY = 0;
- bestOfZ = 0;
- setDayOrNight();
- }
- /*
- Tentativa de pegar a segunda vez que balancou o celular
- mSensorManager.unregisterListener(this);
- try {
- Thread.sleep((long)500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
- xyz[0] = event.values[0];
- xyz[1] = event.values[1];
- xyz[2] = event.values[2];
- if (xyz[0] > min || xyz[1] > min || xyz[2] > min){
- setDayOrNight();
- }*/
- // retorna para o estado 0 se nao obteve acereracao no tempo de 1 segundo
- if (diff > 1000) {
- state = 0;
- bestOfX = 0;
- bestOfY = 0;
- bestOfZ = 0;
- }
- }
- protected void setDayOrNight() {
- try {
- // ferramenta para formatar a hora com hh:mm:ss
- SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
- // pega a data atual sem formatacao
- Date data = new Date();
- int i = (int) (Math.random() * 10);
- // instancia o calendario
- Calendar cal = Calendar.getInstance();
- // seta a data no calendario instanciado
- cal.setTime(data);
- // formata a data atual no formato hh:mm:ss
- Date dataAtual = cal.getTime();
- String horaAtual = sdf.format(dataAtual);
- // inteiro para comparacao
- int hora;
- // Text view que ira' aparecer se e' dia ou noite
- TextView tv;
- tv = (TextView) findViewById(R.id.day_or_night);
- if (horaAtual.length() > 0) {
- hora = Integer.parseInt(horaAtual.replace(":", ""));
- // so' se for dia
- if (hora > 60000 && hora < 180000) {
- tv.setText(getString(R.string.bom_dia));
- }
- // se for noite
- else {
- tv.setText(getString(R.string.boa_noite));
- }
- // numero aleatorio so' para testes
- tv = (TextView) findViewById(R.id.description);
- tv.setText("Aleatório: " + i);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment