Java 如何使用加速计检测高于或等于2Gs的振动?
我正在做一个android应用程序,它类似于一个汽车“黑匣子”,记录汽车的行驶过程 但我面临的问题是,如何集成一个能够在发生事故时检测运动(可能>=2Gs)的加速计,然后它应该触发视频录制停止并将其保存到存档文件中,从而不会因事故而丢失文件。。任何人都知道如何做上述任务,我需要紧急帮助这里请!我读过android开发者关于加速计的文章,但这对我的情况没有帮助。首先,我的物理成绩相当差;其次,我是android/java新手,我第一次尝试使用加速计?有简单的解决办法吗?提前感谢:) 这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?将startRecording()方法放在下面的活动中,当加速度超过2G时会调用它,您可以通过更改CRASH\u G\u乘数的值来更改它Java 如何使用加速计检测高于或等于2Gs的振动?,java,android,accelerometer,Java,Android,Accelerometer,我正在做一个android应用程序,它类似于一个汽车“黑匣子”,记录汽车的行驶过程 但我面临的问题是,如何集成一个能够在发生事故时检测运动(可能>=2Gs)的加速计,然后它应该触发视频录制停止并将其保存到存档文件中,从而不会因事故而丢失文件。。任何人都知道如何做上述任务,我需要紧急帮助这里请!我读过android开发者关于加速计的文章,但这对我的情况没有帮助。首先,我的物理成绩相当差;其次,我是android/java新手,我第一次尝试使用加速计?有简单的解决办法吗?提前感谢:) 这是视频录制部
public class YourActivity extends Activity {
private double G = 9.81;
private double CRASH_G_MULTIPLIER = 2;
@Override public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startDropListening();
}
private void startRecording(){
// your code that does the recording here
}
private void startDropListening(){
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
sm.registerListener(
new SensorEventListener(){
@Override public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override public void onSensorChanged(SensorEvent arg0) {
double accel = Math.sqrt(
Math.pow(arg0.values[0], 2) +
Math.pow(arg0.values[1], 2) +
Math.pow(arg0.values[2], 2));
if (accel > G * CRASH_G_MULTIPLIER){
startRecording();
}
}
},
sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
}
您应该注意以下几点:
wl.release();
(您可能希望将完全唤醒锁定更改为低优先级唤醒锁定)。(您还需要为唤醒锁向清单文件添加适当的权限)
SensorManager.SENSOR_DELAY_UI
SensorManager.SENSOR_DELAY_GAME
SensorManager.SENSOR_DELAY_FASTEST
有两点:
Bosch BMA150用于许多智能手机,2g设置为最大加速度值(因此您可能永远看不到>2g)。
使用最快的传感器延迟,您可以在HTC上每隔20毫秒读取一次读数。但是,由于手机上有一个多任务操作系统,因此无法保证此时间(操作系统繁忙时可能会出现几秒钟的延迟)
因此,智能手机目前并不真正适合此应用程序。如果Android允许在未来更智能地使用加速计,这种情况可能会改变。如果允许onSensorChanged设置一个阈值参数,则超过该阈值的加速度可以缓冲在加速计芯片的存储器中,并在适当时读取。2G,普通汽车中非常少量。当你打喷嚏时,你可以达到2.9G;-)@那么,您建议Gs值是多少?即使我知道这个值,我也不知道如何实现必要的代码?你能帮帮我吗?我是个机器人新手,急需帮助。。。被困在这一周左右没有真正的进展…我看到一整列的问题自动与你的帖子关联,出现在它的右边。你有没有试过读它们中的任何一个?我的物理成绩不好,所以你应该核实一下。但假设v为50 km/h,撞击时间约为80 ms,这约为173 m/s^2 so 17g。但这是理论,在实践中这是非常复杂的。这里有一个包含一些数据的表,可以使用double-accel=Math.sqrt(Math.pow(arg0.values[0],2)+Math.pow(arg0.values[1],2)+Math.pow(arg0.values[2],2));那么2的值是固定的?对不起,金娜的身体不好。。