指南针不能在某些设备上工作
我们最近发布了iPhone应用程序的Android端口。该应用程序依赖于数字指南针的一些功能。这在大多数设备上都运行良好,但有一些指南针不起作用。对于描述,似乎设备不给我们任何onSensorChanged()消息。指南针不能在某些设备上工作
一对夫妇,似乎有问题的设备有:在Android 2.2 的HTC Desire 摩托罗拉Droid在Android 2.2.3
他们声称,其他的应用程序,利用指南针做工精细。
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()中的代码非常标准,它基于您可以在网上找到的无数例子。
那么,有没有人有任何想法,为什么指南针代码可能不会在这些设备上工作?
我弄明白了。结果发现,在2.2中,除了标准的SENSOR_DELAY_UI,SENSOR_DELAY_NORMAL等之外,您不能使用传感器速率。文档声称您还可以指定通知之间的微秒数,但它们在撒谎。
一旦我使用的标准常量它开始于2.2
你还没有解释它是什么意思,指南针不起作用。
如果你没有得到有效的数据,这可能是这个设备众所周知的问题。与我的,我需要总是滚动它的手(水平和垂直)解锁指南针。有些应用程序称它为校准但对我来说这是荒谬的...我有HTC Desire。
对不起,问题似乎是我们在注册接收它们后从未收到任何onSensorChanged()调用。这不是*我们刚收到无效数据的情况。 – btschumy 2011-12-28 16:17:15
FYI工作:似乎大多数(所有?)的是有问题的乡亲都在2.2.x中 – btschumy 2011-12-27 21:25:20
我还注意到一些示例代码通过以下方式获取传感器: List sendorList = sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); 传感器磁力计= sensorList.get(0); 这会帮助,而不是getDefaultSensor()? – btschumy 2011-12-27 21:34:03