2013-02-19 80 views
0

在我的應用程序中,我使用AccelerationSensor.accelerationchanged(xAccel,yAccel,zAccel)API 問題是該方法被調用每個o.oooo1在任何軸上發生更改,因此應用程序變爲非常緩慢,有時甚至變成「不響應」AccelerationSensor.accelerationchanged()使應用程序緩慢

有沒有辦法檢查整數部分是否已經改變,並讓任何十進制變化?

+0

您使用的是什麼傳感器輪詢間隔? – draksia 2013-02-19 20:12:06

+0

傳感器輪詢時間間隔:400 – mabdrabo 2013-02-19 20:14:33

回答

1

這是我在做什麼,我在我的服務

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

這是我處理我的數據的功能,它重量很輕,但它應該使用閾值給你一個想法的onStartCommand()。在我的情況下,我真的只需要瞭解一下設備,在我的情況下,它發現差異值約爲1.75G,但對您而言可能會有所不同。

@Override 
public void onSensorChanged(SensorEvent event) { 


    if(last[0] == 0.0f && 
     last[1] == 0.0f && 
     last[2] == 0.0f){ 

     last[0] = event.values[0]; 
     last[1] = event.values[1]; 
     last[2] = event.values[2]; 

     return; 
    } 

    float diff = 0f; 

    if(Math.abs(last[0] - event.values[0]) > differenceValue || 
     Math.abs(last[1] - event.values[1]) > differenceValue || 
      Math.abs(last[2] - event.values[2]) > differenceValue){ 

     Log.d(TAG,"G values are "+event.values[0]+" "+event.values[1]+" "+event.values[2]); 
     Log.d(TAG,"Last G values are "+last[0]+" "+last[1]+" "+last[2]); 



     diff = Math.abs(last[0] - event.values[0]); 

     if(diff < Math.abs(last[1] - event.values[1])){ 
      diff = Math.abs(last[1] - event.values[1]); 
     } 

     if(diff < Math.abs(last[2] - event.values[2])){ 
      diff = Math.abs(last[2] - event.values[2]); 
     } 

     Log.d(TAG,"Sensor difference: "+diff); 

     //Do what ever processing you need here 

    } 

    last[0] = event.values[0]; 
    last[1] = event.values[1]; 
    last[2] = event.values[2]; 
} 
+0

它的工作,非常感謝:-) – mabdrabo 2013-02-19 20:38:23

1

當您爲傳感器註冊偵聽器時,它允許您設置頻率。使用較慢的頻率。

+0

此外,您可能希望有一個閾值,如果差異較小,只是返回並且不要處理這些值。 – draksia 2013-02-19 20:12:58

+0

仍然沒有用,我從400到700 – mabdrabo 2013-02-19 20:15:32

+0

然後門檻是要走的路,正如draksia建議的那樣。你必須做一些重大的處理,以使應用程序無響應。也許你應該啓動一個線程來做實際的計算。 – 2013-02-19 20:17:29