我的問題是如何獲得在Android中使用加速計晃動手機之間的時間間隔。我的默認閾值是800,速度計算公式是:如何在android中移動晃動時獲得時間差?
speed = Math.abs(x+y+z - last_x - last_y - last_z)/ diffTime * 10000;
在這裏,我想獲得第一次搖動和下一次搖晃之間的持續時間。如果持續時間超過10秒,則意味着警報必須生成。
我不知道如何計算傳感器概念的時間間隔。請幫幫我。
謝謝。
我的問題是如何獲得在Android中使用加速計晃動手機之間的時間間隔。我的默認閾值是800,速度計算公式是:如何在android中移動晃動時獲得時間差?
speed = Math.abs(x+y+z - last_x - last_y - last_z)/ diffTime * 10000;
在這裏,我想獲得第一次搖動和下一次搖晃之間的持續時間。如果持續時間超過10秒,則意味着警報必須生成。
我不知道如何計算傳感器概念的時間間隔。請幫幫我。
謝謝。
只需使用System.currentTimeMillis()
來獲取時間爲第抖動並將其保存到某個變量說preTime
,當用戶再次動搖,那麼你可以得到時間差,只是減去這樣diffTime = System.currentTimeMillis() - preTime
現在如果價值diffeTime/(1000 *10) > 10
然後做你的計算
檢查你的手機旋轉,你可以使用加速度傳感器,
http://www.techrepublic.com/blog/app-builder/a-quick-tutorial-on-coding-androids-accelerometer/472
但是您需要使用此傳感器檢查全部旋轉並增加旋轉值
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];
}
}