1

我正在尝试在我的 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 上!我在我的三星 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 ...

令人惊讶的是,我可以很好地使用磁性传感器……但不能使用加速度计!任何人都可以提出一些建议吗?

4

1 回答 1

0

好的,所以在我的手机刷了 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/#!topic/mobile/b0duELH-tV0

通过将我的 Nexus 降级到 4.2.2 解决了这个问题

以下是降级说明: http ://www.cultofandroid.com/46632/downgrade-nexus-4-to-android-4-3-jelly-bean-from-kitkat/2/ (您可以按照相同的说明进行 4.2 .2)

我试过 Android 4.3 , 4.4.2 .. CyanogenMod 4.4.2 ... Accelerometer 的传感器事件调用不起作用...

一旦我降级到 4.2.2 .. 它就开始正常工作了...

谷歌似乎还没有修复一些错误/驱动程序问题!

于 2014-02-19T20:35:17.913 回答