Я создаю приложение в Android, где мне нужно определить, упал ли человек. Я знаю, что этот вопрос был задан и получен ответ на вопрос об использовании векторной математики на других форумах, но я не получаю из этого точных результатов.
Ниже приведен мой код для обнаружения падения:
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
if (arg0.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
double gvt=SensorManager.STANDARD_GRAVITY;
float vals[] = arg0.values;
//int sensor=arg0.sensor.getType();
double xx=arg0.values[0];
double yy=arg0.values[1];
double zz=arg0.values[2];
double aaa=Math.round(Math.sqrt(Math.pow(xx, 2)
+Math.pow(yy, 2)
+Math.pow(zz, 2)));
if (aaa<=6.0) {
min=true;
//mintime=System.currentTimeMillis();
}
if (min==true) {
i++;
if(aaa>=13.5) {
max=true;
}
}
if (min==true && max==true) {
Toast.makeText(FallDetectionActivity.this,"FALL DETECTED!!!!!" ,Toast.LENGTH_LONG).show();
i=0;
min=false;
max=false;
}
if (i>4) {
i=0;
min=false;
max=false;
}
}
}
Чтобы объяснить приведенный выше код, я использовал векторную сумму и проверил, достигло ли значение меньше или равно 6 (при падении) и внезапно больше 13,5 (при посадке), чтобы подтвердить падение.
Теперь мне сказали на форумах, что если устройство все еще является векторным, сумма вернет значение 9,8. При падении он должен быть близок к 0 и должен достигать 20 при посадке. Похоже, этого не происходит в моем случае. Пожалуйста, кто-нибудь может подсказать, если я где-то не так?