2011-05-23 16 views
0

我正在做Android應用程序,就像汽車「黑匣子」,它記錄了汽車的旅行過程。如何使用加速度計檢測高於或等於2G的virbration?

但是我面臨的問題是如何整合一個能夠檢測移動的加速度計(可能> = 2Gs),當發生事故時它應該觸發視頻記錄停止並保存到檔案文件,因此不會因爲事故而丟失文件。任何人都知道如何執行上述提到的任務,我寧願在這裏請求緊急幫助!我讀過加速度計上的android開發人員和它沒有幫助我的情況在這裏首先,我在物理上很糟糕第二我是新的android/java和我的第一次嘗試使用加速度計?任何簡單解決方案感謝提前:)

這是視頻錄製,但現在我打算如何將加速度計爲「自動歸檔」的宗旨節的一部分嗎?

+0

2G,在普通汽車中的金額很小。當你打噴嚏時,你可以達到2,9G ;-)。 – 2011-05-23 16:29:06

+0

@那麼你會推薦什麼樣的Gs值?即使我知道價值,我不知道如何實現必要的代碼?你能幫助我在android中相當新的和迫切需要幫助...一直堅持了一個星期左右,沒有真正的進展... – Vivian 2011-05-23 16:31:26

+0

我看到一列加速度計android自動與您的帖子相關聯的問題,出現在它的右邊。你有沒有嘗試閱讀其中的任何一個? – 2011-05-23 16:40:30

回答

0

把你的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); 
    } 
} 

有一些事情你應該知道的:

  1. 正如其他人所提到的,2的值需要相當大的提高,但您可以通過實驗自行調整。

  2. 您將要收購喚醒鎖。要創建一個喚醒鎖,這樣做:

    PowerManager的PM =(電源管理器)getSystemService(Context.POWER_SERVICE); wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,「ATag」); wl.acquire();

而且當你完成了以下內容:

wl.release(); 

(您可能需要更改FULL_WAKE_LOCK低優先級喚醒鎖)。 (您還需要爲清單文件添加適當的權限以進行喚醒鎖定)

  1. 您可能希望提高採樣率。儘管如此,這會消耗電池。有不同的值,可以分配給它,在上面的代碼中,替換:

    SensorManager.SENSOR_DELAY_NORMAL

與任何這些:

SensorManager.SENSOR_DELAY_UI 
SensorManager.SENSOR_DELAY_GAME 
SensorManager.SENSOR_DELAY_FASTEST 
+0

double accel = Math.sqrt( Math.pow(arg0.values [0 ],2)+ Math.pow(arg0.values [1],2)+ Math.pow(arg0.values [2],2));所以2的值是固定的?對不起,物理學中的惡靈 – Vivian 2011-05-24 04:51:11

1

幾個要點: 的博世BMA150用於許多智能手機,其最大加速度值設爲2g(因此您可能永遠不會看到> 2g)。 使用SENSOR_DELAY_FASTEST,您可以在HTC Desire上讀取每20毫秒的讀數。但是,由於手機上有多任務操作系統,因此無法保證此時間(操作系統繁忙時可能會發生幾秒鐘的延遲)。

因此,智能手機目前並不適合這種應用。如果Android允許在未來更智能地使用加速度計,這可能會發生變化。如果允許onSensorChanged使用閾值參數,那麼超過此閾值的加速度可以緩存在加速計芯片的內存中,並在適當時讀出。