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