6

我正在为 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) {}
};
4

3 回答 3

2

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

只要数据没问题,这应该纯粹是装饰性的。

于 2011-05-26T16:25:39.700 回答
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)和我同事的手机(三星银河标签)。因此,您可能会考虑更换传感器,只是为了解决设备兼容性问题。:-)

于 2011-05-28T19:39:10.417 回答