2011-05-12 53 views
6

我正在开发一款适用于Android的简单指南针类型应用程序,用于测试Xoom WiFi。加速计读数的准确度始终为SensorManager.SENSOR_STATUS_UNRELIABLE。磁场读数总是准确的SensorManager.SENSOR_STATUS_ACCURACY_HIGH。这可能是Xoom中的错误,还是我的代码中存在问题?Android 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) {} 
}; 

回答

2

的歌Nexus S有这个问题太(带陀螺仪),它看起来就像是由于懒惰司机作家谁忘记了设置的准确性领域阅读;)

只要数据很好,这应该是纯粹的美容。

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难以置信),但文我妻子的手机上的各种疯狂(Droid的临) ,和我的同事的手机(三星Galaxy Tab)。所以你可能会考虑改变你的传感器,仅仅为了设备兼容性问题。 :-)