我正在使用加速度传感器实现跌倒检测,并创建以下代码.
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跌倒检测所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)