2011-12-27 94 views
1

我們最近發佈了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()中的代碼非常標準,它基於您可以在網上找到的無數例子。

那麼,有沒有人有任何想法,爲什麼指南針代碼可能不會在這些設備上工作?

+0

FYI工作:似乎大多數(所有?)的是有問題的鄉親都在2.2.x中 – btschumy 2011-12-27 21:25:20

+0

我還注意到一些示例代碼通過以下方式獲取傳感器: List sendorList = sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); 傳感器磁力計= sensorList.get(0); 這會幫助,而不是getDefaultSensor()? – btschumy 2011-12-27 21:34:03

回答

1

我弄明白了。結果發現,在2.2中,除了標準的SENSOR_DELAY_UI,SENSOR_DELAY_NORMAL等之外,您不能使用傳感器速率。文檔聲稱您還可以指定通知之間的微秒數,但它們在撒謊。

一旦我使用的標準常量它開始於2.2

0

你還沒有解釋它是什麼意思,指南針不起作用。

如果你沒有得到有效的數據,這可能是這個設備衆所周知的問題。與我的,我需要總是滾動它的手(水平和垂直)解鎖指南針。有些應用程序稱它爲校準但對我來說這是荒謬的...我有HTC Desire。

+0

對不起,問題似乎是我們在註冊接收它們後從未收到任何onSensorChanged()調用。這不是*我們剛收到無效數據的情況。 – btschumy 2011-12-28 16:17:15

相關問題