Точность акселерометра Android Xoom всегда ненадежна

#android #accelerometer #xoom

#Android #акселерометр #xoom

Вопрос:

Я работаю над простым приложением типа compass для 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) {}
};
  

Ответ №1:

Ответ №2:

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

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

Ответ №3:

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

 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) происходили всевозможные сбои. Поэтому вы могли бы рассмотреть возможность замены вашего датчика, просто из-за проблем с совместимостью устройств. 🙂