【发布时间】:2019-01-07 13:36:29
【问题描述】:
我有一个链接到 4 个不同活动(页面)的主页。我已经使用SensorEventListener 实现了摇动功能,它响应正确,但我现在只能用它来打开一个活动,例如:我可以让它摇一次来打开一个活动,或者摇两次来打开一个活动但不能同时使用这两个 if 语句。
我尝试过使用带边界的 if 和 else 语句,因为我知道如何设置摇动次数,但我不明白如何让程序检测到完全等待我做多少次摇动后再执行任务。
private final SensorEventListener sensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
Intent tts = new Intent(context, ttsScreen.class);
Intent stt = new Intent(context, sttScreen.class);
Intent cbb = new Intent(context, cbbScreen.class);
Intent ocr = new Intent(context, ocrScreen.class);
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
acelLast = acelValue;
acelValue = (float) Math.sqrt((double) (x*x + y*y + z*z));
float difference = acelValue - acelLast;
shake = shake * 0.9f + difference;
if(shake > 12 && shake < 24 ) {
startActivity(tts);
}
else if (shake > 24 && shake < 36) {
startActivity(stt);
}
else if (shake > 36 && shake < 48) {
startActivity(cbb);
}
else if (shake > 48) {
startActivity(ocr);
}
}
在我的onCreate 方法中,我有以下内容:
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sm.registerListener(sensorListener,sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
acelValue = SensorManager.GRAVITY_EARTH;
acelLast = SensorManager.GRAVITY_EARTH;
shake = 0.00f;
目前它将始终打开startActivity(tts)。我不确定我需要采取什么方法,但我在想可能是一个计时器或其他东西,以便它在打开活动之前完全检查我做了多少次摇晃。或者 if/else 方法不是正确的方法?
【问题讨论】:
标签: java android accelerometer shake