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

看起来有问题的一些设备是:
Android 2.2上的HTC Desire
Android 2.2.3上的Motorola 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,则不会发生配准。我很确定磁力计不是null,因为如果是,我们将隐藏指南针功能。因此,这些手机上的加速度计可能为空吗?

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

那么,有人对罗盘代码为何在这些设备上不起作用有任何想法吗?

最佳答案

我确实知道了。事实证明,在2.2中,除了标准的SENSOR_DELAY_UI,SENSOR_DELAY_NORMAL等之外,您不能使用其他传感器速率。文档声称您还可以指定两次通知之间的微秒数,但是它们是在撒谎。

一旦我使用了标准常量,它就开始在2.2上运行

关于android - 指南针在某些设备上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8647567/

10-12 03:15