把你的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 =(電源管理器)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
2G,在普通汽車中的金額很小。當你打噴嚏時,你可以達到2,9G ;-)。 – 2011-05-23 16:29:06
@那麼你會推薦什麼樣的Gs值?即使我知道價值,我不知道如何實現必要的代碼?你能幫助我在android中相當新的和迫切需要幫助...一直堅持了一個星期左右,沒有真正的進展... – Vivian 2011-05-23 16:31:26
我看到一列加速度計android自動與您的帖子相關聯的問題,出現在它的右邊。你有沒有嘗試閱讀其中的任何一個? – 2011-05-23 16:40:30