2012-12-06 25 views
0

我的問題是如何獲得在Android中使用加速計晃動手機之間的時間間隔。我的默認閾值是800,速度計算公式是:如何在android中移動晃動時獲得時間差?

speed = Math.abs(x+y+z - last_x - last_y - last_z)/ diffTime * 10000; 

在這裏,我想獲得第一次搖動和下一次搖晃之間的持續時間。如果持續時間超過10秒,則意味着警報必須生成。

我不知道如何計算傳感器概念的時間間隔。請幫幫我。

謝謝。

回答

0

只需使用System.currentTimeMillis()來獲取時間爲第抖動並將其保存到某個變量說preTime,當用戶再次動搖,那麼你可以得到時間差,只是減去這樣diffTime = System.currentTimeMillis() - preTime

現在如果價值diffeTime/(1000 *10) > 10然後做你的計算

休息
0
private static final int FORCE_THRESHOLD = 800; 
    private static final int TIME_THRESHOLD = 100; 
    private static final int SHAKE_TIMEOUT = 500; 
    private static final int SHAKE_DURATION = 1000; 
    private static final int SHAKE_COUNT = 3; 
    private float mLastX=-1.0f, mLastY=-1.0f, mLastZ=-1.0f; 
    private long mLastTime; 
    private Context mContext; 
    private int mShakeCount = 0; 
    private long mLastShake; 
    private long mLastForce; 



    public void onSensorChanged(SensorEvent event) { 
           if(event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) return; 

    Log.v("sensor","sensor change is verifying"); 
    long now = System.currentTimeMillis(); 

    if ((now - mLastForce) > SHAKE_TIMEOUT) { 
     mShakeCount = 0; 
    } 

    if ((now - mLastTime) > TIME_THRESHOLD) { 
     long diff = now - mLastTime; 
     float speed = Math.abs(event.values[SensorManager.DATA_X] + event.values[SensorManager.DATA_Y] + event.values[SensorManager.DATA_Z] - mLastX - mLastY - mLastZ)/diff * 10000; 
     if (speed > FORCE_THRESHOLD) { 
     if ((++mShakeCount >= SHAKE_COUNT) && (now - mLastShake > SHAKE_DURATION)) 
     { 
      mLastShake = now; 
      mShakeCount = 0; 
      //call the reaction you want to have happen 
      onShake(); 
     } 
     mLastForce = now; 
     } 
     mLastTime = now; 
     mLastX = event.values[SensorManager.DATA_X]; 
     mLastY = event.values[SensorManager.DATA_Y]; 
     mLastZ = event.values[SensorManager.DATA_Z]; 
     } 
    } 
相關問題