Android Xoom加速度计的准确性始终不可靠

时间:2011-05-12 23:04:07

标签: android accelerometer xoom

我正在研究Android的简单罗盘类型应用程序,在Xoom WiFi上进行测试。加速度计读数的准确度始终为SensorManager.SENSOR_STATUS_UNRELIABLE。磁场读数总是准确度SensorManager.SENSOR_STATUS_ACCURACY_HIGH。这可能是Xoom中的错误,还是我的代码中存在问题?

onCreate:
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
accelGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

onResume:
mSensorManager.registerListener(accelListener, accelGravitySensor, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(magListener, magSensor, SensorManager.SENSOR_DELAY_NORMAL);

private final SensorEventListener accelListener = new SensorEventListener() {
  public void onSensorChanged(SensorEvent event) {
    Log.d(TAG, "accel (" + event.values[0] + ", " + event.values[1] + ", " + event.values[2] + ") accuracy=" + accuracyTag(event.accuracy));
  }
  public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

Nexus S也存在这个问题(使用陀螺仪),看起来这是因为懒惰的驱动程序编写者忘记设置读数的准确性字段;)

只要数据很好,这应该是纯粹的装饰。

答案 2 :(得分:1)

我不知道你是否遇到指南针准确性问题,但我知道我在使用时做了

magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)

我强烈建议您使用更像以下内容。

    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if(mySensors.size() > 0){
        mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_NORMAL);
        sersorrunning = true;
        Toast.makeText(this, "Start ORIENTATION Sensor", Toast.LENGTH_LONG).show(); 
    }

我发现当我使用磁场传感器而不是方向传感器时,它在我的手机上运行得很好(Droid Incredible),但在我妻子的手机(Droid Pro)和我的同事的各种疯狂手机(三星Galaxy Tab)。因此,您可能会考虑更换传感器,仅用于设备兼容性问题。 : - )