我正在研究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) {}
};
答案 0 :(得分:3)
它看起来像是xoom中的一个错误。查看这些帖子:
答案 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)。因此,您可能会考虑更换传感器,仅用于设备兼容性问题。 : - )