2013-02-19 13 views
5

Ich mache mein Projekt, um Daten von Beschleunigungsmesser und Gyroskop-Sensor aufzuzeichnen und es in Datei in SD-Karte zu speichern. Aber ich habe ein Problem, wenn ich für mehr als 1 Sekunde aufnehme, ist das Ergebnis in Datei nur 1 Daten, die aus 1 X-Achse, 1 Y-Achse und 1 Z-Achse bestehen. Im Idealfall sprechen, sollte ich mehr Daten in der Datei erhalten, wie es statt buf.write()Speichern Sie Sensordaten in Datei in 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"); 
      } 

     } 
} 

} 
} 

Antwort

2

aufgezeichnet wird, versuchen buf.append()

es die neuen Sensorwerte werden anhängen, anstatt über Schreiben, wenn Sie verwenden buf.write()

1

müssen Sie verwenden:

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

innen:

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

auch:

out.close(); 

Muss in der anderen "stop" onClick sein.

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

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

    } 
}); 

und als Shehroz, sagten Sie verwenden müssen,

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

Ich hoffe, dass Ihre Frage beantworten.

Verwandte Themen