Точность акселерометра Android Xoom всегда ненадежна - PullRequest
6 голосов
/ 13 мая 2011

Я работаю над простым приложением типа компаса для 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 ]

2 голосов
/ 26 мая 2011

У Nexus S тоже есть эта проблема (с гироскопом), и похоже, что это из-за ленивого писателя драйвера, который забыл установить поле точности чтения;)

Пока данныехорошо, это должно быть чисто косметическим.

1 голос
/ 28 мая 2011

Я не знаю, есть ли у вас проблемы с точностью компаса, но я знаю, что имел, когда использовал

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) и моего коллеги телефон (Samsung Galaxy Tab). Таким образом, вы могли бы рассмотреть вопрос о замене вашего датчика, просто для проблем совместимости устройства. : -)

...