import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager sensorManager;
float[] rotMatrix = new float[9];
float[] radianValues = new float[3];
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
textView = findViewById(R.id.textView);
}
@Override
protected void onPause() {
super.onPause();
// Don't receive any more updates from either sensor.
sensorManager.unregisterListener(this);
}
//when this Activity starts
@Override
protected void onResume()
{
super.onResume();
sensorManager.registerListener(this , sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_GAME_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(rotMatrix, event.values);
SensorManager.remapCoordinateSystem(rotMatrix,
SensorManager.AXIS_X, SensorManager.AXIS_Y, rotMatrix);
SensorManager.getOrientation(rotMatrix, radianValues);
float azimuth = (float) Math.toDegrees(radianValues[0]);
float pitch = (float) Math.toDegrees(radianValues[1]);
float roll = (float) Math.toDegrees(radianValues[2]);
textView.setText(getString(R.string.vr, azimuth, pitch, roll));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}