SENSOR_ACCELEROMETER(Android)的准确度始终为0

时间:2011-05-16 15:40:55

标签: android accelerometer

我正在编写一个需要从加速计传感器获取数据的应用程序。

我已经覆盖了onAccuracyChanged()和onSensorChanged()函数。假设这些函数仅在传感器的精度或值发生变化时调用,但在我的情况下,它们每秒更改很多次,并且总是返回相同的值。

    @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    if(sensor.getType()==Sensor.TYPE_ACCELEROMETER){
        Log.d(TAG, "Accuracy has changed: "+accuracy);
    }
}

@Override
public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
        x = event.values[SensorManager.DATA_X];
        y = event.values[SensorManager.DATA_Y];
        z = event.values[SensorManager.DATA_Z];
        Log.d(TAG, "Sensor changed: "+ event.accuracy+", "+x+", "+y+", "+z);
    }       
}

这很烦人,但同样令人讨厌的是精确度始终为0(SensorManager.SENSOR_STATUS_UNRELIABLE),所以我无法相信它。

可能发生什么?该设备是三星Galaxy S,因此它有加速度计。

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以返回的值是浮点值并且非常准确 你可以将它们转换为整数甚至使用条件,只有当手机处于特定位置时才能获得结果

@Override
public void onSensorChanged(SensorEvent event) {

    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){

        x = event.values[SensorManager.DATA_X];

        y = event.values[SensorManager.DATA_Y];

        z = event.values[SensorManager.DATA_Z];

        if( x > -3 && x < 3  && y > -3 && y < 3  && z < -7 && z > -13  ){
         // this will return value only when the phone is upside down on the table
         // u can set as ur own liking
         Log.d(TAG, "Sensor changed: "+ event.accuracy+", "+x+", "+y+", "+z);
        }
    }       
}