我们最近发布了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/