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国旗在哪里?