Датчик 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 до сих пор не исправил!