指南针不在某些设备上工作

时间:2011-12-27 17:39:59

标签: android digital-compass

我们最近发布了一款iPhone应用程序的Android端口。该应用依赖于数字指南针的一些功能。这在大多数设备上运行良好,但有一些指南针无法正常工作。对于描述,似乎设备没有向我们提供任何onSensorChanged()消息。

一些似乎有问题的设备是: Android 2.2上的HTC Desire Android 2.2.3上的摩托罗拉Droid

他们声称其他使用指南针的应用程序运行正常。

我们使用以下方式启动指南针:

    if ( magnetometer != null && accelerometer != null )
    {
        if ( compassOn )
        {
            sensorManager.registerListener( this, accelerometer, (int) (1000000 / kSensorUpdateFrequencyFast) );
            sensorManager.registerListener( this, magnetometer, (int) (1000000 / kSensorUpdateFrequencyFast) );
        }
        else
        {
            sensorManager.registerListener( this, accelerometer, (int) (1000000 / kSensorUpdateFrequencySlow) );
            sensorManager.registerListener( this, magnetometer, (int) (1000000 / kSensorUpdateFrequencySlow) );
        }
    }

在程序启动时使用以下方法初始化磁力计和加速度计:

    sensorManager = (SensorManager) getSystemService( SENSOR_SERVICE );
    accelerometer = sensorManager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER );
    magnetometer = sensorManager.getDefaultSensor( Sensor.TYPE_MAGNETIC_FIELD );

现在上面的代码表明,如果加速度计== null或磁力计== null,则不会发生注册。我很确定磁力计不是空的,因为如果它是我们隐藏罗盘功能。那么这些手机上的加速度计可能是空的吗?

我的onSensorChanged()中的代码非常标准,基于您可以在网上找到的无数示例。

那么有没有人想到指南针代码可能无法在这些设备上运行的原因?

2 个答案:

答案 0 :(得分:1)

我确实想到了这一点。事实证明,在2.2中您不能使用标准SENSOR_DELAY_UI,SENSOR_DELAY_NORMAL等以外的传感器速率。文档声称您还可以指定通知之间的微秒数,但它们是在说谎。

一旦我使用标准常量,它就开始使用2.2

答案 1 :(得分:0)

你没有解释它意味着什么,指南针不起作用。

如果您没有获得有效数据,可能是这个设备的常见问题。有了我的,我需要总是用手(水平和垂直)滚动它来解锁指南针。有些应用称之为校准,但对我来说这是荒谬的......我有HTC Desire。