我们最近发布了一个iPhone应用的安卓移植。该应用程序的一些功能依赖于数字罗盘。这在大多数设备上都工作得很好,但也有一些指南针不起作用。根据描述,设备似乎没有向我们提供任何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 );现在,上面的代码表明,如果加速计==为空或磁力计==为空,则不会进行配准。我很确定磁力计不是空的,因为如果是空的,我们就隐藏了指南针的特征。所以可能这些手机上的加速度计是空的?
我的onSensorChanged()中的代码非常标准,并且基于您可以在web上找到的无数示例。
那么,有没有人知道为什么指南针代码可能在这些设备上不起作用?
发布于 2011-12-29 23:09:00
我确实想通了。在2.2中,除了标准的SENSOR_DELAY_UI、SENSOR_DELAY_NORMAL等,你不能使用传感器速率。文档声称你也可以指定两次通知之间的微秒数,但他们是在撒谎。
一旦我使用了标准常量,它就开始在2.2上工作
发布于 2011-12-28 19:25:33
你还没解释那是什么意思,指南针不工作了。
如果您未获得有效数据,则此设备可能存在众所周知的问题。对于我的,我需要always在手中(水平和垂直)滚动它来解锁指南针。一些应用程序称它为校准,但对我来说,这是一件荒谬的事情……我有HTC的欲望。
https://stackoverflow.com/questions/8647567
复制相似问题