Java 如何使用加速计检测1Gs以上的振动?

Java 如何使用加速计检测1Gs以上的振动?,java,android,accelerometer,Java,Android,Accelerometer,我正在做一个android应用程序,它类似于一个汽车黑匣子,记录汽车的行驶过程 但现在我面临的问题是如何集成一个加速计,该加速计能够在发生事故时检测轻微移动(可能大于1Gs),它可以触发视频录制停止并将其保存到存档文件中,从而不会因事故而丢失文件。。有人知道如何执行上述任务来监测任何形式的振动吗 我是android/java新手,有人能帮我指点一下吗?先谢谢你 这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?您需要使用onSensorChanged(SensorEvent事件

我正在做一个android应用程序,它类似于一个汽车黑匣子,记录汽车的行驶过程

但现在我面临的问题是如何集成一个加速计,该加速计能够在发生事故时检测轻微移动(可能大于1Gs),它可以触发视频录制停止并将其保存到存档文件中,从而不会因事故而丢失文件。。有人知道如何执行上述任务来监测任何形式的振动吗

我是android/java新手,有人能帮我指点一下吗?先谢谢你


这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?

您需要使用
onSensorChanged(SensorEvent事件)
接口的回调
SensorEventListener

在此处获取
SensorEvent
类的详细信息:

IBM的developerWorks页面上有一个示例:


来自android参考页面:

公开最终浮动[]

值自:API 三级

值的长度和内容 阵列取决于所使用的传感器类型 被监控(另请参见传感器事件 有关坐标的定义,请参见 系统(已使用)。 传感器类型\加速计:所有值 单位为国际单位制(m/s^2)

值[0]
:x轴上的加速度减去Gx

值[1]
:y轴上的加速度减去Gy

值[2]
:z轴上的加速度减去Gz

这种类型的传感器测量 施加在装置上的加速度 (广告)。从概念上讲,它是通过 测量施加在传感器上的力 使用关系的自身(Fs):Ad=- ∑Fs/质量

特别是,重力是 总是影响被测对象 加速度:Ad=-g-∑F/质量

因此,当设备 坐在桌子上(显然不是 加速度计读数 g=9.81 m/s^2的震级

类似地,当设备处于 自由落体,因此非常危险 以9点81分的速度向地面加速 m/s^2,其加速计读数为a 震级为0米/秒^2

显然,为了 测量发动机的实际加速度 装置,力的贡献 必须消除重力的影响。这 可以通过应用 高通滤波器。相反,a 低通滤波器可用于隔离 重力


第一个try块缺少
{
和a
catch
block!谢谢你的回答。但不幸的是,我的物理不是很好……但是我如何将你上面的代码实现到我当前的活动类中,以感知任何大于1G的力的碰撞?@Vivian你读过上面的链接了吗?这里有一些关于如何实现liste的示例然后使用为
onSensorChanged(…)发布的代码并按照数组“<代码>线性加速> <代码>做任何你想要的。在你的例子中,我认为你需要比1G大的加速度值来检测碰撞。虽然我不知道这些值,但是你必须研究什么是最好的阈值。最后一个提示:考虑加速度的绝对值。对不起,如果我是C。我不太理解你或你提供的文档,我对android编程的兴趣只有一个月左右,而我的讲师只给了我两周的时间来完成这项任务……:(因为我不太清楚我将如何编写SensorChanged(…)使用线性加速度值触发停止录制并将其归档到目录中?我知道我可能要求你太多了,因为这不是你的任务..但你能给我更多帮助吗?@Vivian,在
onSensorChanged
方法中添加一个if块,然后调用
startRecording()在你的加速度高于你的阈值的情况下,函数。你应该能够和你的讲师讨论实现细节。另外,我看到你有三个回答问题。请考虑把它们标记为被接受。记住这是一个要求特定问题的站点,而不是完整的代码块。可以告诉我。这两个答案中哪一个更好?-->
 public void onSensorChanged(SensorEvent event)
 {
      // alpha is calculated as t / (t + dT)
      // with t, the low-pass filter's time-constant
      // and dT, the event delivery rate

      final float alpha = 0.8;

      gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
      gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
      gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

      linear_acceleration[0] = event.values[0] - gravity[0];
      linear_acceleration[1] = event.values[1] - gravity[1];
      linear_acceleration[2] = event.values[2] - gravity[2];
 }