2012-12-06 24 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]; 
     } 
    } 
相关问题