android跌倒检测,Android跌倒检测
我正在使用加速度傳感器實現跌倒檢測,并創建以下代碼.
public void onSensorChanged(SensorEvent foEvent) {
if (foEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
double loX = foEvent.values[0];
double loY = foEvent.values[1];
double loZ = foEvent.values[2];
double loAccelerationReader = Math.sqrt(Math.pow(loX, 2)
+ Math.pow(loY, 2)
+ Math.pow(loZ, 2));
mlPreviousTime = System.currentTimeMillis();
Log.i(TAG, "loX : " + loX + " loY : " + loY + " loZ : " + loZ);
if (loAccelerationReader <= 6.0) {
moIsMin = true;
Log.i(TAG, "min");
}
if (moIsMin) {
i++;
Log.i(TAG, " loAcceleration : " + loAccelerationReader);
if (loAccelerationReader >= 30) {
long llCurrentTime = System.currentTimeMillis();
long llTimeDiff = llCurrentTime - mlPreviousTime;
Log.i(TAG, "loTime :" + llTimeDiff);
if (llTimeDiff >= 10) {
moIsMax = true;
Log.i(TAG, "max");
}
}
}
if (moIsMin && moIsMax) {
Log.i(TAG, "loX : " + loX + " loY : " + loY + " loZ : " + loZ);
Log.i(TAG, "FALL DETECTED!!!!!");
Toast.makeText(this, "FALL DETECTED!!!!!", Toast.LENGTH_LONG).show();
i = 0;
moIsMin = false;
moIsMax = false;
}
if (i > 5) {
i = 0;
moIsMin = false;
moIsMax = false;
}
}
}
它會檢測到我摔倒的情況,但是如果我騎馬或跑步,它也會給我摔倒的警報.
如果我從6英寸處扔出設備,則會顯示警報.
我還看到靈敏度是特定于設備的.
當我以相同的高度測試moto e和mi 4時
Moto e返回loAccelerationReader的最大32值
在mi 4中,它將為loAccelerationReader返回60值
任何人都可以以正確的方式幫助我.
解決方法:
我得到一些解決方案,不確定它是否適用于所有功能,但是我正在使用下面的代碼及其適用于我.
if (foEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
double loX = foEvent.values[0];
double loY = foEvent.values[1];
double loZ = foEvent.values[2];
double loAccelerationReader = Math.sqrt(Math.pow(loX, 2)
+ Math.pow(loY, 2)
+ Math.pow(loZ, 2));
DecimalFormat precision = new DecimalFormat("0.00");
double ldAccRound = Double.parseDouble(precision.format(loAccelerationReader));
if (ldAccRound > 0.3d && ldAccRound < 0.5d) {
//Do your stuff
}
}
標簽:android-sensors,android,accelerometer
來源: https://codeday.me/bug/20191012/1897950.html
總結
以上是生活随笔為你收集整理的android跌倒检测,Android跌倒检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: socket编程实现回声客户端
- 下一篇: android歌词效果,自定义View: