我正在制作一个Android应用程序,用于测量手机放在地板上时的振动。如何使用加速度计(0-50Hz)和麦克风(50-500Hz)测量振动?我是Android开发的新手,但这是给我的一个项目。我知道在appstore中有很多与此相关的应用程序,但我不知道它是如何制作的。我搜索了教程,但我只找到了关于摇动手势的教程。
答案 0 :(得分:1)
首先为Accelerometer实现一个监听器:
class SENSOR_EVENT_LISTENER implements SensorEventListener {
float[] accelerometer_data = new float[3];
float[] gravity = new float[3];
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
final float alpha = 0.8f;
// Isolate the force of gravity with the low-pass filter.
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];
accelerometer_data[0] = event.values[0] - gravity[0];
accelerometer_data[1] = event.values[1] - gravity[1];
accelerometer_data[2] = event.values[2] - gravity[2];
break;
default:
return;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
然后注册你的接收者:
final SensorManager sensor_manager = (SensorManager) m_context.getSystemService(Context.SENSOR_SERVICE);
listener = new SENSOR_EVENT_LISTENER();
final List<Sensor> sensors = sensor_manager.getSensorList(Sensor.TYPE_ACCELEROMETER);
if(sensors.size() > 0) {
sensor = sensor_manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensor_manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
在振动前和振动期间检查值。您将看到振动期间的值发生了显着变化。
我不确定麦克风,但单独听取加速度计就足以测量振动。如果您需要有关麦克风的帮助,我可以更新我的代码。
希望这有帮助。