2016-04-24 140 views
0

我一直在使用Sony Smartwatch 3在長時間段(平均8小時)內錄製加速計數據。以下是主代碼塊:ax,ay和az是用於存儲傳感器值的數組列表,ta是具有相應時間戳的數組列表。Android Smartwatch採樣頻率

private void startMeasurement() { 
    mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE)); 
    Log.d("lister", "listeners"); 
    Sensor accelerometerSensor = mSensorManager.getDefaultSensor(SENS_ACCELEROMETER); 

    // Register the listener 
    if (mSensorManager != null) { 
     mSensorManager.registerListener(this, accelerometerSensor,25000); 
    } 
} 

    @Override 
public void onSensorChanged(SensorEvent event) { 
    if(event.sensor.getType() == SENS_ACCELEROMETER){ 
     ax.add(event.values[0]); 
     ay.add(event.values[1]); 
     az.add(event.values[2]); 
     ta.add(System.currentTimeMillis()); 
    } 

} 

public void write(){ 
    String timeStamp = new SimpleDateFormat("yyMMdd_HHmmss").format(Calendar.getInstance().getTime()); 
    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sensor_data/" + timeStamp + ".csv"); 
    try{ 
     FileWriter fw = new FileWriter(file); 
     BufferedWriter buffWriter = new BufferedWriter(fw,50*1024); 
     for(int i=0;i<ax.size();i++){ 
      buffWriter.write(String.valueOf(ax.get(i))); 
      buffWriter.write(","); 
      buffWriter.write(String.valueOf(ay.get(i))); 
      buffWriter.write(","); 
      buffWriter.write(String.valueOf(az.get(i))); 
      buffWriter.write(","); 
      buffWriter.write(String.valueOf(ta.get(i))); 
      buffWriter.write("\n"); 
     } 
     buffWriter.flush(); 
     buffWriter.close(); 
    }catch (IOException e){ 
     e.printStackTrace(); 
    } 

} 

當我們看看樣本之間的時間差異後,我發現在記錄數據一段時間後,這段時間會增加。在下面的鏈接中,您可以看到以秒爲單位的樣本間時間差的圖。 enter image description here

爲什麼發生這種情況後,一段時間的記錄後突然突然跳到50?

回答

2

結束了使用Android的PowerManager和PARTIAL_WAKE_LOCK解決問題。它消耗更多的電池,但我真的需要將採樣頻率保持在幾乎恆定。