У меня есть фрагмент кода для обнаружения движений акселерометра. Иногда он работает, правильно обнаруживая небольшие движения, но иногда он обнаруживает движения, когда я не использовал свое устройство. Есть ли проблемы со встроенным определением акселерометра на Android?
Я использую устройство HTC G-1. Мой фрагмент кода ниже. Как мне решить эту проблему, чтобы я мог обнаруживать небольшие движения устройства, но не обнаруживать ничего, когда устройство находится в режиме ожидания?
private static final int SHAKE_THRESHOLD = 50;
public void onSensorChanged(int sensor, float[] values) {
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// only allow one update every 100ms.
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
x = values[SensorManager.DATA_X];
y = values[SensorManager.DATA_Y];
z = values[SensorManager.DATA_Z];
float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
long curTime = System.currentTimeMillis();
long diff = (curTime - shakeTime);
shakeTime = curTime;
if (myFlagIgnoreShakeDetection==true) //Caused unneccessary accelerometer
//notification looping when device is idle
return;
// Doing something...
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
lastUpdate
,shakeTime
,last_x
,last_y
иlast_z
? Какие у них начальные значения? - person gnovice   schedule 27.10.2009myFlagIgnoreShakeDetection
является логическим значением, то часть==true
не нужна. - person gnovice   schedule 28.10.2009