- 我们根据地磁传感器和加速度传感器来进行当前手机旋转的方向
- 同时使用一个imageView来展示我们当前的方向的展示,并让其根据手机旋转的角度来旋转指向正确的方向

public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
private Sensor accelerometerSensor;
private Sensor magneticSensor;
private ImageView imageView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
sensorManager.registerListener(listener,magneticSensor,SensorManager.SENSOR_DELAY_GAME);
}
private void init() {
sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometerSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magneticSensor=sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
imageView= (ImageView) findViewById(R.id.imageView);
}
private SensorEventListener listener=new SensorEventListener() {
float[] accelerometerValues=new float[9];
float[] magneticValues=new float[3];
float lastDegree;
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
accelerometerValues=event.values.clone();
}else if (event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
magneticValues=event.values.clone();
}
float[] R=new float[9];
float[] values=new float[3];
SensorManager.getRotationMatrix(R,null,accelerometerValues,magneticValues);
SensorManager.getOrientation(R,values);
Log.d("MainActivity",Math.toDegrees(values[0])+"");
float rotateDegree= (float) -Math.toDegrees(values[0]);
if (Math.abs(rotateDegree-lastDegree)>1){
new ObjectAnimator().ofFloat(imageView,"rotation",lastDegree,rotateDegree).setDuration(100).start();
lastDegree=rotateDegree;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
protected void onDestroy() {
super.onDestroy();
sensorManager.unregisterListener(listener);
}
}