Android加速度计:不推荐使用SensorManager.DATA_X - 现在是什么?

时间:2012-12-03 16:25:33

标签: android android-sensors

我使用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);

1 个答案:

答案 0 :(得分:2)

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

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获取values

  @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.
  }