4

我使用 StackOverflow 的一些建议编写了一个加速度计应用程序(用于学习目的)。一切正常,但我在代码中收到“SensorManager.DATA_X 已弃用”消息作为警告:

// setup the textviews for displaying the accelerations
mAccValueViews[SensorManager.DATA_X] = (TextView) findViewById(R.id.accele_x_value);
mAccValueViews[SensorManager.DATA_Y] = (TextView) findViewById(R.id.accele_y_value);
mAccValueViews[SensorManager.DATA_Z] = (TextView) findViewById(R.id.accele_z_value);

我尝试在这里和其他地方搜索我应该做什么而不是使用“SensorManager.DATA_X”,但我似乎找不到任何说明。

官方指南说要使用“传感器”,但我不知道怎么做!

如果有人可以提出上述新的“官方”方式,我将不胜感激。

编辑 重新阅读文档后(这次是正确的!)我注意到“SensorManager.DATA_X”只返回一个int,它是onSensorChanged(int,float [])返回的数组中X值的索引。我能够将上面的代码更改为此,它完美地工作并且没有任何不推荐使用的警告:

// setup the textviews for displaying the accelerations
    mAccValueViews[0] = (TextView) findViewById(R.id.accele_x_value);
    mAccValueViews[1] = (TextView) findViewById(R.id.accele_y_value);
    mAccValueViews[2] = (TextView) findViewById(R.id.accele_z_value);
4

1 回答 1

5

文档很清楚,创建你的传感器:

private SensorManager mSensorManager;
private Sensor mSensor;

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

if (mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}

还有你的Sensor,注册一个监听器来使用它:

mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);

然后,您可以使用 OnSensorChanged 获取

  @Override
  public final void onSensorChanged(SensorEvent event) {
    // Many sensors return 3 values, one for each axis.
    float xaccel = event.values[0];
    // Do something with this sensor value.
  }
于 2012-12-03T16:37:15.957 回答