我正在研究一个项目,其中包括我试图获得没有重力组件的加速度计数据。但是,我似乎无法从虚拟传感器获取更新:“线性加速度”和“重力”。代码如下:TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY不起作用
public class SensorModule implements SensorEventListener{
(...)
public SensorModule(Context context){
this.context = context;
sensorManager = (SensorManager) context.getSystemService(context.SENSOR_SERVICE);
sensorAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorMagneticField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensorLinearAccel = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
sensorGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override
public void onSensorChanged(SensorEvent event) {
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
((SensorActivity)context).accelX.setText("" + event.values[0]);
((SensorActivity)context).accelY.setText("" + event.values[1]);
((SensorActivity)context).accelZ.setText("" + event.values[2]);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
((SensorActivity)context).magneX.setText("" + event.values[0]);
((SensorActivity)context).magneY.setText("" + event.values[1]);
((SensorActivity)context).magneZ.setText("" + event.values[2]);
break;
case Sensor.TYPE_LINEAR_ACCELERATION:
((SensorActivity)context).linearX.setText("" + event.values[0]);
((SensorActivity)context).linearY.setText("" + event.values[1]);
((SensorActivity)context).linearZ.setText("" + event.values[2]);
break;
case Sensor.TYPE_GRAVITY:
((SensorActivity)context).gravityX.setText("" + event.values[0]);
((SensorActivity)context).gravityY.setText("" + event.values[1]);
((SensorActivity)context).gravityZ.setText("" + event.values[2]);
}
}
public void registerListeners(){
sensorManager.registerListener(this, sensorAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorMagneticField, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorLinearAccel, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensorGravity, SensorManager.SENSOR_DELAY_NORMAL);
}
public void unregisterListeners(){
sensorManager.unregisterListener(this, sensorAccelerometer);
sensorManager.unregisterListener(this, sensorMagneticField);
sensorManager.unregisterListener(this, sensorLinearAccel);
sensorManager.unregisterListener(this, sensorGravity);
}
我在活动中注册侦听器onResume()并取消注册onPause()。我可以从加速计和磁力计获得更新,但是TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY没有产生任何更新。我知道我的设备具有来自getSensorList(Sensor.TYPE_ALL)的这些虚拟传感器。另外,当我调用getDefaultSensor(...)时,它会为这4个传感器中的每一个都返回非空值。我分别在onSensorChanged()方法内部烘烤了每种情况,但线性和重力的情况从不出现,这意味着这些更新不会被生成。我也尝试了一个更大的延迟(SENSOR_DELAY_UI)给它更多的时间,但仍然没有骰子。我正在测试运行Lollipop 5.0.1(API 21)的Nexus 5。任何人都有线索?