2013-02-19 36 views
5

Tôi đang thực hiện dự án của mình để ghi dữ liệu từ cảm biến gia tốc và con quay hồi chuyển và lưu nó vào tệp trong sdcard. Nhưng tôi có vấn đề, khi tôi bắt đầu ghi âm trong hơn 1 giây, kết quả trong tập tin chỉ là 1 dữ liệu bao gồm 1 trục x, 1 trục y và 1 trục z. Nói cách lý tưởng, tôi sẽ nhận được nhiều dữ liệu hơn trong nội dung tập tin đã được ghiLưu dữ liệu cảm biến vào tập tin trong 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"); 
      } 

     } 
} 

} 
} 

Trả lời

2

Thay vì buf.write(), hãy thử buf.append()

nó sẽ nối các cảm biến mới chứ không phải qua bằng văn bản khi bạn sử dụng buf.write()

1

bạn phải sử dụng:

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

bên:

//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)); 
    } 
}); 

thêm:

out.close(); 

Phải bên trong "cửa" khác onClick.

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

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

    } 
}); 

và như Shehroz nói, bạn phải sử dụng,

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

Tôi hy vọng rằng trả lời câu hỏi của bạn.

Các vấn đề liên quan