Código
Este es el código que funciona perfectamente en el android 2.2.
//Sensor de caida
protected void onResume() {
super.onResume();
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
if (sensors.size() > 0) {
sm.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_GAME);
}
}
protected void onStop() {
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm.unregisterListener(this);
super.onStop();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
@Override
public void onSensorChanged(SensorEvent event) {
if(Caidasid.equals("On") && x==0)
{
synchronized (this) {
long current_time = event.timestamp;
curX = event.values[0];
curY = event.values[1];
curZ = event.values[2];
if (prevX == 0 && prevY == 0 && prevZ == 0) {
last_update = current_time;
last_movement = current_time;
prevX = curX;
prevY = curY;
prevZ = curZ;
}
long time_difference = current_time - last_update;
if (time_difference > 0) {
float movement = Math.abs((curX + curY + curZ) - (prevX - prevY - prevZ)) / time_difference;
int limit = 1500;
float min_movement = (valorCaida);
if (movement > min_movement) {
if (current_time - last_movement >= limit) {
vibrator.vibrate(3000);
Toast.makeText(getApplicationContext(),"Se ha enviado un sms de ayuda" , Toast.LENGTH_SHORT).show();
}
}
last_movement = current_time;
}
prevX = curX;
prevY = curY;
prevZ = curZ;
last_update = current_time;
}
}
}
}
Bueno el valorCaida es un valor que elijo yo primero en la configuración y para el caso del android 4.0.3 LG Optimus L5 me va relativamente bien con el valor 0.00000375 (con el android 2.2 me va bien con el valor0.0000009) pero aunque al principio va bien pero luego se activa el solo y si esta el wifi desactivado y lo activo tb lo asocia como una caída.
Muchas gracias por la ayuda.
|