我们最近发布了一个 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() 中的代码非常标准,并且基于您可以在网络上找到的无数示例。
那么,是否有人对为什么指南针代码可能无法在这些设备上运行有任何想法?