0

私の質問は、Androidで加速度計を使用してモバイルを振る間の時間を取得する方法です。私のデフォルトのしきい値は800で、速度の計算式は次のとおりです。

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

ここでは、最初のシェイクと次のシェイクの間の時間を取得したいと思います。期間が10秒を超える場合は、アラートを生成する必要があることを意味します。

センサーの概念で時間間隔を計算する方法がわかりません。私を助けてください。

ありがとう。

4

3 に答える 3

0

System.currentTimeMillis()最初のシェイクの時間を取得し、それを変数に保存するために使用するだけ preTimeです。ユーザーが再度シェイクすると、このように減算するだけで時間差を取得できます。 diffTime = System.currentTimeMillis() - preTime

そして今、その値がdiffeTime/(1000 *10) > 10あなたの残りの計算をするなら

于 2012-12-06T07:46:04.130 に答える
0

携帯電話の回転を確認するには、加速度センサーを使用できます。

http://www.techrepublic.com/blog/app-builder/a-quick-tutorial-on-coding-androids-accelerometer/472

ただし、このセンサーを使用して完全な回転を確認し、回転の値を増やす必要があります

于 2012-12-06T07:47:32.007 に答える
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];
      }
  }
于 2012-12-06T07:54:10.103 に答える