2013-02-19 3 views
5

나는 가속도계 및 자이로 스코프 센서의 데이터를 기록하고 sdcard에 파일로 저장하는 프로젝트를 수행 중입니다. 하지만 문제가 있습니다. 1 초 이상 녹음을 시작하면 파일의 결과는 1 x 축, 1 y 축 및 1 z 축으로 구성된 단지 1 개의 데이터입니다. 이상적으로 말하면, 나는 그것이 대신 buf.write()센서 데이터를 android에 파일로 저장

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    //return inflater.inflate(R.layout.get_data, container, false); 

    //get path from sdcard 
    sdcard = Environment.getExternalStorageDirectory().getPath(); 

    rootView = inflater.inflate(R.layout.get_data, container,false); 
    Button start = (Button) rootView.findViewById(R.id.buttonstart); 
    Button stop = (Button) rootView.findViewById(R.id.buttonstop); 

    //eksekusi saat klik button stop 
    stop.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      rekam = false; 
      // TODO Auto-generated method stub 

      //sensorManager.unregisterListener(mySensorEventListener); 
      //super.onStop(); 


     } 
    }); 

    //eksekusi saat klik button start 
    start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      rekam = true; 
      String nama = sdcard+"/datasensor.txt"; 
      namafile = new File(nama); 



     } 
    }); 
    return rootView; 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 
    parent = getActivity(); 
    sensorManager = (SensorManager) parent.getSystemService(Context.SENSOR_SERVICE); 
    sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0); 
    sensorgyroscope = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE).get(0); 

    koordinatX = (TextView)rootView.findViewById(R.id.coordinatx); 
    koordinatY = (TextView)rootView.findViewById(R.id.coordinaty); 
    koordinatZ = (TextView)rootView.findViewById(R.id.coordinatz); 

    koordinatrollX = (TextView)rootView.findViewById(R.id.coordinatrollx); 
    koordinatpitchY = (TextView)rootView.findViewById(R.id.coordinatpitchy); 
    koordinatyawZ = (TextView)rootView.findViewById(R.id.coordinatyawz); 

    sensorManager=(SensorManager) parent.getSystemService(Context.SENSOR_SERVICE); 
    //add listener for accelerometer 
    sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL); 
    //add listener for gyroscope 
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    // TODO Auto-generated method stub 
    if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) 
    { 

     //assign directions accelometer 
     float x = event.values[0]; 
     float y = event.values[1]; 
     float z = event.values[2]; 

     koordinatX.setText("X: "+x); 
     koordinatY.setText("Y: "+y); 
     koordinatZ.setText("Z: "+z); 

     if(rekam==true) 
     { 
      try 
      { 
       BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); 
       out.write(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2])); 
       out.close(); 
      } 
      catch (IOException e) 
      { 
       System.out.println("Exception"); 
      } 

     } 
    } 

    if(event.sensor.getType()==Sensor.TYPE_GYROSCOPE) 
    {     
     float roolX = event.values[0]; 
     float pitchY = event.values[1]; 
     float yawZ = event.values[2]; 


     koordinatrollX.setText("Orientation X (Roll) :" + Float.toString(event.values[0])); 
     koordinatpitchY.setText("Orientation Y (Pitch) :" + Float.toString(event.values[1])); 
     koordinatyawZ.setText("Orientation Z (Yaw):" + Float.toString(event.values[2])); 

     if(rekam==true) 
     { 
      try 
      { 
      BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); 
      out.write(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2])); 
      out.close(); 
      } 

      catch (IOException e) 
      { 
       System.out.println("Exception"); 
      } 

     } 
} 

} 
} 

답변

2

를 기록되고 같은 파일에 더 많은 데이터를 얻을 buf.append()

은 오히려 사용 기록을 통해보다 새로운 센서 판독 값을 추가합니다 시도해야 buf.write()

1

당신은 사용해야합니다 : 내부

BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); 

:

또한
//eksekusi saat klik button start 
start.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     rekam = true; 
     String nama = sdcard+"/datasensor.txt"; 
     namafile = new File(nama); 
     //use it here. 
     BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); 
    } 
}); 

:

out.close(); 

다른 "정지"onclick을 내부이어야합니다.

//eksekusi saat klik button stop 
stop.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     rekam = false; 
     out.close(); 

    } 
}); 

및 Shehroz가 말한대로, 당신은 사용할 필요가

,

out.append(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2])); 

나는 그 질문에 대한 답변 바랍니다.