我正在做Android应用程序,就像汽车黑匣子一样记录了汽车的行驶过程。
但是现在我面临的问题是如何集成一个能够检测到轻微移动(可能> 1G)的加速度计,当发生事故时它可以触发视频录制停止并将其保存到归档文件,因此不会因事故而丢失文件。任何人都知道如何进行上述任务以监控任何形式的振动?
我是android / java的新手,有人可以帮我指导吗?提前谢谢......
这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?
答案 0 :(得分:1)
您需要使用接口onSensorChanged(SensorEvent event)
SensorEventListener
回调
在此处获取SensorEvent
课程的详细信息:http://developer.android.com/reference/android/hardware/SensorEvent.html
IBM的developerWorks页面上有一个例子:http://www.ibm.com/developerworks/opensource/library/os-android-sensor/index.html
来自Android参考页面:
public final float []
值自:API 3级
值的长度和内容 数组取决于哪种传感器类型 被监控(另见SensorEvent 用于坐标的定义 使用的系统)。 Sensor.TYPE_ACCELEROMETER:所有值 以SI单位(m / s ^ 2)
values[0]
:加速度减去x轴上的Gx
values[1]
:加速度减去y轴上的Gy
values[2]
:加速度减去z轴上的Gz这种类型的传感器测量 应用于设备的加速度 (广告)。从概念上讲,它是这样做的 测量施加在传感器上的力 本身(Fs)使用关系:Ad = - ΣFs/ mass
特别是,重力是 总是影响测量 加速度:Ad = -g - ΣF/质量
因此,当设备是 坐在桌子上(显然不是 加速度计,加速计读数 幅度g = 9.81 m / s ^ 2
同样,当设备进入时 自由落体,因此是危险的 在9.81加速逼近地面 m / s ^ 2,其加速度计读数为a 幅度为0 m / s ^ 2.
显然,为了 测量真实的加速度 装置,力量的贡献 必须消除重力。这个 可以通过应用a来实现 高通滤波器。相反,a 低通滤波器可用于隔离 引力。
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];
}