我使用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);
答案 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.
}