我们最近发布了一款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()中的代码非常标准,基于您可以在网上找到的无数示例。
那么有没有人想到指南针代码可能无法在这些设备上运行的原因?
答案 0 :(得分:1)
我确实想到了这一点。事实证明,在2.2中您不能使用标准SENSOR_DELAY_UI,SENSOR_DELAY_NORMAL等以外的传感器速率。文档声称您还可以指定通知之间的微秒数,但它们是在说谎。
一旦我使用标准常量,它就开始使用2.2
答案 1 :(得分:0)
你没有解释它意味着什么,指南针不起作用。
如果您没有获得有效数据,可能是这个设备的常见问题。有了我的,我需要总是用手(水平和垂直)滚动它来解锁指南针。有些应用称之为校准,但对我来说这是荒谬的......我有HTC Desire。