Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 摇动手机后如何继续计时_Java_Android_Chronometer - Fatal编程技术网

Java 摇动手机后如何继续计时

Java 摇动手机后如何继续计时,java,android,chronometer,Java,Android,Chronometer,我怎样才能在摇晃手机后继续计时。当我摇动手机时,计时器开始工作。但如果我再摇晃一次,计时器就会复位,然后重新启动。我想我对计时器中的start()stop()方法有一些问题,但不幸的是,我不知道如何解决它 public class MainActivity extends AppCompatActivity { private static final String TAG = "ShakeBaby"; private Chronometer mChronometer; private s

我怎样才能在摇晃手机后继续计时。当我摇动手机时,计时器开始工作。但如果我再摇晃一次,计时器就会复位,然后重新启动。我想我对计时器中的
start()
stop()
方法有一些问题,但不幸的是,我不知道如何解决它

public class MainActivity extends AppCompatActivity {

private static final String TAG = "ShakeBaby";

private Chronometer mChronometer;

private static final int SHAKE_SENSITIVITY = 1;

private TextView startRun, finishRun, calmPosition;

private SensorManager sensorManager;

private float accel = SensorManager.GRAVITY_EARTH;
private float accelPrevious = SensorManager.GRAVITY_EARTH;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mChronometer = findViewById(R.id.mChronometer);

    startRun = findViewById(R.id.startRun);
    finishRun = findViewById(R.id.finishRun);
    calmPosition = findViewById(R.id.calmPosition);

    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(
            sensorListener,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);

    mChronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            long elapsedMillis = SystemClock.elapsedRealtime()
                    - mChronometer.getBase();

            if (elapsedMillis > 10000) {
                finishRun.setVisibility(View.VISIBLE);
            }
        }
    });
}

@Override
protected void onResume() {
    super.onResume();
    sensorManager.registerListener(
            sensorListener,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onStop() {
    sensorManager.unregisterListener(sensorListener);
    mChronometer.stop();
    super.onStop();
}

protected void onShake(){
    Log.d(TAG, "SHAKE");
    startRun.setVisibility(View.VISIBLE);
    mChronometer.setBase(SystemClock.elapsedRealtime());
    mChronometer.start();
}

private final SensorEventListener sensorListener = new SensorEventListener() {

    public void onSensorChanged(SensorEvent sensorEvent) {
        float x = sensorEvent.values[0];
        float y = sensorEvent.values[1];
        float z = sensorEvent.values[2];
        accelPrevious = accel;
        accel = (float) Math.sqrt((double) (x * x + y * y + z * z));
        if (accel - accelPrevious > SHAKE_SENSITIVITY) {
            onShake();
            }
        }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
};
/* *******************************/

}

启动时将标志设置为true。如果flag为true,则不要reset@jhamon国旗在哪里?