我在同时从加速度计和陀螺仪获取数据时遇到了一些问题。我需要使用这些传感器来获取加速度和方向,以便计算我正在进行的项目的相对位置。当两个传感器同时使用时,会导致一些非常奇怪的数据输出,其中的数据每秒只改变一次。当只运行加速计时,数据并没有太好,因为它在最快设置下的变化速度大约为每秒10次。这些数据被打印到一个文件中,每个传感器的读取都有一个时间戳。
我很难在网上找到教程,尤其是同时使用多个传感器。我需要将每个传感器放在不同的线程上吗?我没有太多使用线程的经验,我怎么能这样做。

最佳答案

你不需要把每个传感器放在不同的线程上。你可以使用类传感器管理器来注册和注销你需要的不同传感器。

public class SensorActivity extends Activity, implements SensorEventListener {
 private final SensorManager mSensorManager;
 private final Sensor mAccelerometer;
 private final Sensor mGyroscope;

 public SensorActivity() {
     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
     mGyroscope = mSensorManager.getDefaultSensor(TYPE_GYROSCOPE);
 }

 protected void onResume() {
     super.onResume();
     mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
     mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_NORMAL);
 }

 protected void onPause() {
     super.onPause();
     mSensorManager.unregisterListener(this);
 }

实现sensorEventList处理程序(特别是sensorChanged方法)并检查谁属于接收的数据:
 public void onSensorChanged(SensorEvent sensorEvent) {
    sensorName = sensorEvent.sensor.getName();
    Log.d(sensorName + ": X: " + sensorEvent.values[0] + "; Y: " + sensorEvent.values[1] + "; Z: " + sensorEvent.values[2] + ";");

}

09-16 05:43
查看更多