2013-02-19 51 views
5

Wykonuję mój projekt, aby zarejestrować dane z czujnika przyspieszenia i żyroskopu i zapisać go w pliku na sdcard. Ale mam problem, kiedy zaczynam nagrywać przez więcej niż 1 sekundę, wynik w pliku to tylko 1 dane, które składają się z 1 osi x, 1 y osi i 1 osi z. Idealnie rzecz biorąc, powinien dostać więcej danych w pliku, ponieważ jest nagrywanaZapisz dane czujnika do pliku w Androidzie

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

     } 
} 

} 
} 

Odpowiedz

2

Zamiast buf.write(), spróbuj buf.append()

będzie dołączać nowe odczyty czujników niż na piśmie, gdy używasz buf.write()

1

trzeba użyć:

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

wewnątrz:

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

również:

out.close(); 

Musi być wewnątrz drugiej "stop" onclick.

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

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

    } 
}); 

i jak powiedział Shehroz, trzeba użyć,

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

Mam nadzieję, że odpowiedź na Twoje pytanie.