2017-03-13 7 views
0

Android用のコーディングが新しくなりました。私は加速度計を私のアンドロイドからcsvファイルに保存しようとしています。私はそれがアプリケーションが開始されたときにx、y、zの値を常に(毎秒引数として)記録したい。それはcsvファイルに保存していますが、x、y、zの出力は1つしかありません。私はforループを使っていますが、他に何が必要なのかはわかりません。 `public class Accelerometer_Data extends Activityは、SensorEventListener { private float lastX、lastY、lastZ;}を実装しています。どのように定期的にcsvファイルにアンドロイド加速度計のデータを保存するには?

private SensorManager sensorManager; 
private Sensor accelerometer; 

private float deltaXMax = 0; 
private float deltaYMax = 0; 
private float deltaZMax = 0; 

private float deltaX = 0; 
private float deltaY = 0; 
private float deltaZ = 0; 

private float vibrateThreshold = 0; 

private TextView currentX, currentY, currentZ, maxX, maxY, maxZ; 

public Vibrator v; 
final int REQUEST_CODE_ASK_PERMISSIONS = 123; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_accelormeter__data); 
    initializeViews(); 
    checkPermissions(); 
    // save = (Button) findViewById(R.id.save_btn); 

    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) { 
     // success! we have an accelerometer 

     accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
     vibrateThreshold = accelerometer.getMaximumRange()/2; 

    } else { 
     // fail! we don't have an accelerometer! 
     Toast.makeText(getBaseContext(), "Can't Find Data ", Toast.LENGTH_LONG).show(); 
    } 

    //initialize vibration 
    v = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE); 
} 

public void initializeViews() { 
    currentX = (TextView) findViewById(R.id.currentX); 
    currentY = (TextView) findViewById(R.id.currentY); 
    currentZ = (TextView) findViewById(R.id.currentZ); 

    maxX = (TextView) findViewById(R.id.maxX); 
    maxY = (TextView) findViewById(R.id.maxY); 
    maxZ = (TextView) findViewById(R.id.maxZ); 
} 

//onResume() register the accelerometer for listening the events 
protected void onResume() { 
    super.onResume(); 
    sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
} 

//onPause() unregister the accelerometer for stop listening the events 
protected void onPause() { 
    super.onPause(); 
    sensorManager.unregisterListener(this); 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    // clean current values 
    displayCleanValues(); 
    // display the current x,y,z accelerometer values 
    displayCurrentValues(); 
    // display the max x,y,z accelerometer values 
    displayMaxValues(); 

    // get the change of the x,y,z values of the accelerometer 
    deltaX = Math.abs(lastX - event.values[0]); 
    deltaY = Math.abs(lastY - event.values[1]); 
    deltaZ = Math.abs(lastZ - event.values[2]); 

    // if the change is below 2, it is just plain noise 
    if (deltaX < 2) 
     deltaX = 0; 
    if (deltaY < 2) 
     deltaY = 0; 
    if ((deltaX > vibrateThreshold) || (deltaY > vibrateThreshold) || (deltaZ > vibrateThreshold)) { 
     v.vibrate(50); 
    } 

    String entry = currentX.getText().toString() + "," + currentY.getText().toString() + "," + currentZ.getText().toString() + ","; 
    try { 

     File sdCard = Environment.getExternalStorageDirectory(); 
     File dir = new File(sdCard.getAbsolutePath() + "/sean"); 
     Boolean dirsMade = dir.mkdir(); 
     //System.out.println(dirsMade); 
     Log.v("Accel", dirsMade.toString()); 

     File file = new File(dir, "output.csv"); 
     FileOutputStream f = new FileOutputStream(file); 
     f = new FileOutputStream(file); 


     try { 
      f.write(entry.getBytes()); 
      f.flush(); 
      f.close(); 
      Toast.makeText(getBaseContext(), "Data saved", Toast.LENGTH_LONG).show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

public void displayCleanValues() { 
    currentX.setText("0.0"); 
    currentY.setText("0.0"); 
    currentZ.setText("0.0"); 
} 

// display the current x,y,z accelerometer values 
public void displayCurrentValues() { 
    currentX.setText(Float.toString(deltaX)); 
    currentY.setText(Float.toString(deltaY)); 
    currentZ.setText(Float.toString(deltaZ)); 
} 

// display the max x,y,z accelerometer values 
public void displayMaxValues() { 
    if (deltaX > deltaXMax) { 
     deltaXMax = deltaX; 
     maxX.setText(Float.toString(deltaXMax)); 
    } 
    if (deltaY > deltaYMax) { 
     deltaYMax = deltaY; 
     maxY.setText(Float.toString(deltaYMax)); 
    } 

    if (deltaZ > deltaZMax) { 
     deltaZMax = deltaZ; 
     maxZ.setText(Float.toString(deltaZMax)); 
    } 
} 

private void checkPermissions() { 
    int hasWriteContactsPermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSIONS); 
     return; 
    } 
    Toast.makeText(getBaseContext(), "Permission is already granted", Toast.LENGTH_LONG).show(); 
} 

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ASK_PERMISSIONS: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Permission Granted 
       Toast.makeText(getBaseContext(), "Permission Granted", Toast.LENGTH_LONG).show(); 
      } else { 
       // Permission Denied 
       Toast.makeText(Accelerometer_Data.this, "WRITE_EXTERNAL_STORAGE Denied", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

} `

答えて

0

私は常にあなた自身のファイルを上書きすると思います。第二引数https://developer.android.com/reference/java/io/FileWriter.html

:ここ

FileOutputStream f = new FileOutputStream(file, true); 

あなたがFileOutputStreamについての詳細を見ることができます。これに

FileOutputStream f = new FileOutputStream(file); 
f = new FileOutputStream(file); 

:ここ

すべてこのコードの最初はこれを置き換える、倍増していますブール値は、 "append"モードを有効にして、ファイルを開くたびにファイルを上書きしないようにします。

+0

ありがとうございました –

関連する問題