java - 摇动手机后如何继续计时
问题描述
摇动手机后如何继续计时器。当我摇动手机时,计时器开始工作。但如果我再摇一次,计时器就会重置,然后重新开始。我认为我对start()
stop()
Chronometer 中的方法有一些问题,但不幸的是,我不知道如何解决它。
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) {
}
};
/* *******************************/
}
解决方案
推荐阅读
- reactjs - 如何在fabric.js中添加sprite.class.js?
- python - Python舍入错误非常简单的计算
- spring-cloud - Feign - Hystrix - feign.RetryableException:连接被拒绝:没有更多信息执行 GET
- json - 使用 jq 时 Json 过滤器无法处理数组
- android - 在 Android 部署中,为什么 strings.xml 文件总是空的?
- javascript - 可以html
- r - 如何在R中快速在多个直方图中添加x标签
- javascript - 使用 JavaScript 在电子邮件输入字段中输入值
- webpack - Webpack获取不同块中一个块的文件名作为环境变量
- python - Python2 到 Python3 的转换?TypeError:memoryview:需要一个类似字节的对象,而不是'str'