我們最近發佈了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()中的代碼非常標準,它基於您可以在網上找到的無數例子。
那麼,有沒有人有任何想法,爲什麼指南針代碼可能不會在這些設備上工作?
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