Датчик Nexus 4.TYPE_ACCELEROMETER не работает

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

protected Sensor compass;
protected Sensor accelerometer;
protected SensorManager sensorManager;

sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
    compass = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    try {
        sensorManager.registerListener(this, compass, SensorManager.SENSOR_DELAY_UI);
        sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI);
        Log.d(TAG, "Registered CompassSensorWatcher");
    } catch (Exception e) {
        Log.e("could not register listener", e.toString());


public void onSensorChanged(SensorEvent event) {

    // Logger.d("sensor changed "+event);
    // we use TYPE_MAGNETIC_FIELD to get changes in the direction, but use SensorManager to get directions
    if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
        return;

    // Gets the value of the sensor that has been changed
    switch (event.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        gravity = event.values.clone();
        Log.d(TAG, "Accelerometer onSensorChanged() ");
        Log.d(TAG,String.valueOf(gravity[0]) );
        break;
    case Sensor.TYPE_MAGNETIC_FIELD:
        geomag = event.values.clone();

        break;
    }
}

Я могу получить значения магнитного датчика в порядке... но НЕ значения акселерометра...

Я пробовал это на нескольких телефонах... но проблемы, похоже, возникают только на моем Nexus 4!! Я попробовал на моем Samsung S4, он работал нормально на этом.. но не на Nexus 4...

Nexus 4 использует Android 4.3 .

Затем я обновился до Android 4.4.2, но акселерометр все еще не работал..

Я пытался использовать несколько других приложений из магазина Play, которые используют акселерометр (SensorBox) .. он отлично работал на Nexus 4, но не мой код...

Я также поместил это в мой AndroidManifest.xml:

 <uses-feature android:name="android.hardware.sensor.accelerometer" />
<uses-feature android:name="android.hardware.sensor.compass" />

Все еще проблема, кажется, только с Nexus 4...

Удивительно, как я могу нормально использовать магнитный датчик... но не акселерометр! Может кто-нибудь, пожалуйста, предложить что-то??

1 ответ

Итак, после перепрошивки моего телефона более 5 раз.. Я нашел решение.. Эта проблема известна: http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=62876

https://productforums.google.com/forum/

Решил проблему, понизив мой Nexus до 4.2.2

Вот инструкции по понижению: http://www.cultofandroid.com/46632/downgrade-nexus-4-to-android-4-3-jelly-bean-from-kitkat/2/(Вы можете следовать тем же инструкциям для 4.2 0,2)

Я пробовал Android 4.3, 4.4.2 .. CyanogenMod 4.4.2 ... Вызов сенсорного события для акселерометра просто не работал...

Как только я понизился до 4.2.2.. Он начал работать нормально...

Кажется, ошибка / проблема с драйверами, которую Google до сих пор не исправил!

Другие вопросы по тегам