Android跌倒检测

Android跌倒检测,第1张

概述我正在使用加速度传感器实现跌倒检测,并创建以下代码.publicvoidonSensorChanged(SensorEventfoEvent){if(foEvent.sensor.getType()==Sensor.TYPE_ACCELEROMETER){doubleloX=foEvent.values[0];doubleloY=foEvent.values[

我正在使用加速度传感器实现跌倒检测,并创建以下代码.

  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跌倒检测全部内容,希望文章能够帮你解决Android跌倒检测所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1094083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存