
Android
Javaimport Android.app.Activity;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 Android.widget.TextView;public class CompassActivity extends Activity implements SensorEventListener { private SensorManager sensorManager; private Sensor accelerometer; private Sensor magnetometer; private float[] lastAccelerometer = new float[3]; private float[] lastMagnetometer = new float[3]; private boolean lastAccelerometerSet = false; private boolean lastMagnetometerSet = false; private float[] rotationMatrix = new float[9]; private float[] orientation = new float[3]; private TextView compassTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setcontentView(R.layout.activity_compass); compassTextView = findViewById(R.id.compassTextView); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor == accelerometer) { System.arraycopy(event.values, 0, lastAccelerometer, 0, event.values.length); lastAccelerometerSet = true; } else if (event.sensor == magnetometer) { System.arraycopy(event.values, 0, lastMagnetometer, 0, event.values.length); lastMagnetometerSet = true; } if (lastAccelerometerSet && lastMagnetometerSet) { SensorManager.getRotationMatrix(rotationMatrix, null, lastAccelerometer, lastMagnetometer); SensorManager.getOrientation(rotationMatrix, orientation); float azimuthInRadians = orientation[0]; float azimuthInDegrees = (float) Math.toDegrees(azimuthInRadians); compassTextView.setText("指南针方向:" + azimuthInDegrees); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // 不需要处理精度变化的情况 }}上述代码中,我们首先获取了加速度传感器和磁力计的实例,并在 onResume 方法中注册了传感器监听器。在 onSensorChanged 方法中,我们根据传感器类型保存了最新的数据,并通过 SensorManager 的方法获取了手机的方向。最后,我们将方向显示在界面的 TextView 上。方向传感器是 Android 手机中重要的一个功能,它可以帮助用户在导航、游戏和其他应用中更好地感知方向。本文介绍了方向传感器的工作原理,并以指南针应用为例演示了其应用。开发人员可以根据需求利用方向传感器的数据来开发更多有趣的应用。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号