Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- import android.os.Bundle;
- import androidx.appcompat.app.AppCompatActivity;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- public class SensorsActivity extends AppCompatActivity implements SensorEventListener {
- private SensorManager sensorManager;
- private Sensor accelerometer;
- private Sensor gyroscopemeter;
- private Sensor magnetometer;
- private Sensor barometer;
- private int speed = SensorManager.SENSOR_DELAY_UI;
- private float[] accelerometerVector = new float[3];
- private float[] magneticVector = new float[3];
- private float[] gyroVector = new float[3];
- private float pressure = 0;
- private int acceleroCountDisplay = 0;
- private int gyroCountDisplay = 0;
- private int magnetoCountDisplay = 0;
- private int acceleroAccuracy = 0;
- private int gyroAccuracy = 0;
- private int magnetoAccuracy = 0;
- private int pressureAccuracy = 0;
- // Text UI
- private TextView currentAccX,
- currentAccY,
- currentAccZ,
- currentRotX,
- currentRotY,
- currentRotZ,
- currentMagX,
- currentMagY,
- currentMagZ,
- currentPressure,
- currentAccuracyAccelero,
- currentAccuracyGyro,
- currentAccuracyMagneto,
- currentAccuracyPressure;
- // Button UI
- private Button btnFinishActivity;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_sensors);
- // Init Ui
- initializeUi();
- // Start Sensors
- startSensors();
- // Finish The Activity
- btnFinishActivity.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- });
- }
- // Init UI
- private void initializeUi() {
- currentAccX = findViewById(R.id.currentAccX);
- currentAccY = findViewById(R.id.currentAccY);
- currentAccZ = findViewById(R.id.currentAccZ);
- currentRotX = findViewById(R.id.currentRotX);
- currentRotY = findViewById(R.id.currentRotY);
- currentRotZ = findViewById(R.id.currentRotZ);
- currentMagX = findViewById(R.id.currentMagX);
- currentMagY = findViewById(R.id.currentMagY);
- currentMagZ = findViewById(R.id.currentMagZ);
- currentPressure = findViewById(R.id.currentPressure);
- currentAccuracyAccelero = findViewById(R.id.currentAccuracyAccelero);
- currentAccuracyGyro = findViewById(R.id.currentAccuracyGyro);
- currentAccuracyMagneto = findViewById(R.id.currentAccuracyMagneto);
- currentAccuracyPressure = findViewById(R.id.currentAccuracyPressure);
- btnFinishActivity = findViewById(R.id.back_to_previous_activity);
- }
- // Start Sensors
- private void startSensors() {
- sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
- accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- gyroscopemeter = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
- magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
- barometer = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
- sensorManager.registerListener(this, accelerometer, speed);
- sensorManager.registerListener(this, gyroscopemeter, speed);
- sensorManager.registerListener(this, magnetometer, speed);
- sensorManager.registerListener(this, barometer, speed);
- }
- // Display Value
- private void displayCurrentValues() {
- currentAccX.setText(String.format("%.3f", accelerometerVector[0]));
- currentAccY.setText(String.format("%.3f", accelerometerVector[1]));
- currentAccZ.setText(String.format("%.3f", accelerometerVector[2]));
- currentRotX.setText(String.format("%.3f", gyroVector[0]));
- currentRotY.setText(String.format("%.3f", gyroVector[1]));
- currentRotZ.setText(String.format("%.3f", gyroVector[2]));
- currentMagX.setText(String.format("%.3f", magneticVector[0]));
- currentMagY.setText(String.format("%.3f", magneticVector[1]));
- currentMagZ.setText(String.format("%.3f", magneticVector[2]));
- currentPressure.setText(String.format("%.2f", pressure));
- currentAccuracyAccelero.setText(getAccuracy(acceleroAccuracy));
- currentAccuracyGyro.setText(getAccuracy(gyroAccuracy));
- currentAccuracyMagneto.setText(getAccuracy(magnetoAccuracy));
- currentAccuracyPressure.setText(getAccuracy(pressureAccuracy));
- }
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {}
- @Override
- public void onSensorChanged(SensorEvent event) {
- switch (event.sensor.getType()) {
- case Sensor.TYPE_ACCELEROMETER:
- accelerometerVector[0] = event.values[0];
- accelerometerVector[1] = event.values[1];
- accelerometerVector[2] = event.values[2];
- acceleroAccuracy = event.accuracy;
- acceleroCountDisplay++;
- break;
- case Sensor.TYPE_GYROSCOPE:
- gyroVector[0] = event.values[0];
- gyroVector[1] = event.values[1];
- gyroVector[2] = event.values[2];
- gyroAccuracy = event.accuracy;
- gyroCountDisplay++;
- break;
- case Sensor.TYPE_MAGNETIC_FIELD:
- magneticVector[0] = event.values[0];
- magneticVector[1] = event.values[1];
- magneticVector[2] = event.values[2];
- magnetoAccuracy = event.accuracy;
- magnetoCountDisplay++;
- break;
- case Sensor.TYPE_PRESSURE:
- pressure = event.values[0];
- pressureAccuracy = event.accuracy;
- break;
- default:
- return;
- }
- if (acceleroCountDisplay + gyroCountDisplay + magnetoCountDisplay >= 15) {
- displayCurrentValues();
- acceleroCountDisplay = 0;
- gyroCountDisplay = 0;
- magnetoCountDisplay = 0;
- }
- }
- // Get Sensors Accuracy
- private String getAccuracy(int accuracyValue) {
- switch (accuracyValue) {
- case 0:
- return "UNRELIABLE";
- case 1:
- return "LOW";
- case 2:
- return "MEDIUM";
- case 3:
- return "HIGH";
- case -1:
- return "NO CONTACT";
- default:
- return null;
- }
- }
- // onResume() register the accelerometer for listening the events
- protected void onResume() {
- super.onResume();
- sensorManager.registerListener(this, accelerometer, speed);
- sensorManager.registerListener(this, gyroscopemeter, speed);
- sensorManager.registerListener(this, magnetometer, speed);
- sensorManager.registerListener(this, barometer, speed);
- }
- // onPause() unregister the accelerometer for stop listening the events
- protected void onPause() {
- super.onPause();
- sensorManager.unregisterListener(this);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement