2016-01-11 11 views
1

我使用加速計傳感器,並通過onSensorChanged android系統在模擬器不斷得到觸發

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    mAcceleratorSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mSensorManager.registerListener(this, mAcceleratorSensor , SensorManager.SENSOR_DELAY_NORMAL); 

這是我onSensorChanged看起來像

@Override 
public final void onSensorChanged(SensorEvent event) { 
    int sensorType = event.sensor.getType(); 
    switch(sensorType){ 
     case Sensor.TYPE_ACCELEROMETER: 
      float valueX = event.values[0]; 
      float valueY = event.values[1]; 
      float valueZ = event.values[2]; 
      Log.d(TAG, "Sensor Changed value:"+valueX+":"+valueY+":"+valueZ); 
      break; 

    } 

然而這就是註冊了相同的監聽器我在我的日誌中看到

01-12 02:01:18.063 19691-19691/com.taxis.locationupdates2 D/LocationActivity: Sensor Changed value:2.0:2.0:2.0 
01-12 02:01:18.129 19691-19691/com.taxis.locationupdates2 D/LocationActivity: Sensor Changed value:2.0:2.0:2.0 

它一直在調用onSensorC即使數值沒有變化,也會在無限循環中掛起。我還沒有用真實設備測試過它。是否有任何設置來控制相同。

+0

如果不是真正的設備,你在測試什麼?模擬器與Android Studio或其他東西打包在一起?我寫了一個使用加速度計的應用程序,我遇到的唯一問題是便宜的設備可能非常嘈雜。 –

+0

我正在用AndroidStudio打包的模擬器上測試它。 – BKSingh

回答

0

傳感器文檔具有大約相同的

http://developer.android.com/guide/topics/sensors/sensors_overview.html

默認數據時延是適用於監測典型的屏幕取向的改變的細節,並使用20萬微秒的延遲。您可以指定其他數據延遲,例如SENSOR_DELAY_GAME(20,000微秒延遲),SENSOR_DELAY_UI(60,000微秒延遲)或SENSOR_DELAY_FASTEST(0微秒延遲)。從Android 3.0(API Level 11)開始,您還可以將延遲指定爲絕對值(以微秒爲單位)。

您指定的延遲只是建議的延遲。 Android系統和其他應用程序可以改變這種延遲。作爲最佳做法,您應該指定最大的延遲時間,因爲系統通常使用的延遲比您指定的延遲時間要短(即應選擇仍然滿足應用程序需求的最慢採樣率)。使用較大的延遲會對處理器造成較低的負載,因此功耗較低。

2

該方法名稱很差。

the android docsonSensorChanged

當有一個新的傳感器事件調用。請注意,「已更改」爲 有點不恰當,因爲如果我們從具有完全相同傳感器值(但較新的 時間戳)的傳感器讀取新的 ,也會調用此名稱。