我正在做一个项目,其中之一是,我试图获取加速度计的数据,没有重力分量。然而,我似乎无法从虚拟传感器获得更新:“线性加速度”和“重力”。下面是代码:
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(.)它对这四个传感器中的每一个都返回非空。我分别为onSensorChanged()方法中的每一种情况干杯,但是线性和重力的情况永远不会出现,这意味着这些更新不会产生。我还尝试了一个更大的延迟(SENSOR_DELAY_UI),以给它更多的时间,但仍然没有骰子。我正在运行Lollipop5.0.1 (API 21)的Nexus 5上进行测试。有人知道线索吗?
发布于 2015-02-25 11:29:39
OK,通过应用第一条工程规则和一般常识,问题得到了解决:)只是一次又一次地关闭它,现在它自动工作了。不过,这有点麻烦,因为这意味着,除了使用超时线程来验证定期更新之外,我无法知道传感器是否正常工作。
https://stackoverflow.com/questions/28703870
复制相似问题