Поместите ваш метод startRecording () в действие ниже, он вызывается, когда ускорение превышает 2G, вы можете изменить это, изменив значение CRASH_G_MULTIPLIER
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);
}
}
Есть некоторые вещи, о которых вы должны знать:
Как уже упоминалось другими, значение 2 необходимо значительно увеличить, но вы можете настроить его самостоятельно, экспериментируя.
Вы захотите приобрести замок для пробуждения.Чтобы создать активную блокировку, сделайте следующее:
PowerManager pm = (PowerManager) getSystemService (Context.POWER_SERVICE);wl = pm.newWakeLock (PowerManager.FULL_WAKE_LOCK, "ATag");wl.acquire ();
И следующее, когда вы закончите:
wl.release();
(вы можете изменить FULL_WAKE_LOCK на блокировку пробуждения с более низким приоритетом).(Вам также необходимо добавить соответствующее разрешение в файл манифеста для блокировки пробуждения)
Вы можете увеличить частоту дискретизации.Это значительно разряжает батарею.Существуют различные значения, которые вы можете присвоить ему, в приведенном выше коде замените:
SensorManager.SENSOR_DELAY_NORMAL
на любое из этих:
SensorManager.SENSOR_DELAY_UI
SensorManager.SENSOR_DELAY_GAME
SensorManager.SENSOR_DELAY_FASTEST