Java 如何将android加速计数据持续保存到csv文件?

Java 如何将android加速计数据持续保存到csv文件?,java,android,csv,Java,Android,Csv,我对android的编码还不熟悉。我正在尝试将加速度计从android保存到csv文件。我想让它在应用程序启动时不断记录x、y和z值(为了每秒钟一次)。它正在保存到csv文件,但我只得到一个x、y、z的输出。我假设我使用了for循环,但不确定我还需要什么`公共类加速计\u数据扩展活动实现SensorEventListener{ 私人浮动lastX、lastY、lastZ private SensorManager sensorManager; private Sensor acceleromet

我对android的编码还不熟悉。我正在尝试将加速度计从android保存到csv文件。我想让它在应用程序启动时不断记录x、y和z值(为了每秒钟一次)。它正在保存到csv文件,但我只得到一个x、y、z的输出。我假设我使用了for循环,但不确定我还需要什么`公共类加速计\u数据扩展活动实现SensorEventListener{ 私人浮动lastX、lastY、lastZ

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);
    }
}
private SensorManager SensorManager;
专用传感器加速度计;
私有浮动deltaXMax=0;
私有浮动deltaYMax=0;
私有浮动deltaZMax=0;
个人所得税=0;
私人浮动三角洲=0;
私有浮动deltaZ=0;
私有浮动阈值=0;
私有文本视图currentX、currentY、currentZ、maxX、maxY、maxZ;
公营机构v ;;
最终整数请求\代码\请求\权限=123;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u Accelerometer\u数据);
初始化视图();
检查权限();
//save=(按钮)findviewbyd(R.id.save\u btn);
sensorManager=(sensorManager)getSystemService(Context.SENSOR\u服务);
if(sensorManager.getDefaultSensor(Sensor.TYPE_Accelerator)!=null){
//成功!我们有一个加速计
加速计=sensorManager.getDefaultSensor(传感器类型\加速计);
sensorManager.registerListener(此,加速计,sensorManager.SENSOR\u延迟\u正常);
振动阈值=加速计。getMaximumRange()/2;
}否则{
//失败!我们没有加速度计!
Toast.makeText(getBaseContext(),“找不到数据”,Toast.LENGTH_LONG.show();
}
//初始化振动
v=(可控震源)this.getSystemService(Context.可控震源\u服务);
}
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()注册用于侦听事件的加速计
受保护的void onResume(){
super.onResume();
sensorManager.registerListener(此,加速计,sensorManager.SENSOR\u延迟\u正常);
}
//onPause()注销加速计以停止侦听事件
受保护的void onPause(){
super.onPause();
sensorManager.UnregistereListener(此);
}
@凌驾
精度更改时的公共无效(传感器,int精度){
}
@凌驾
传感器更改时的公共无效(传感器事件){
//清洁电流值
displayCleanValues();
//显示当前的x、y、z加速度计值
显示当前值();
//显示最大x、y、z加速度计值
displayMaxValues();
//获取加速度计的x、y、z值的变化
deltaX=Math.abs(lastX-event.values[0]);
deltaY=Math.abs(lastY-event.values[1]);
deltaZ=Math.abs(lastZ-event.values[2]);
//如果变化小于2,那就是纯噪音
如果(deltaX<2)
deltaX=0;
如果(三角洲<2)
deltaY=0;
如果((deltaX>振动阈值)| |(deltaY>振动阈值)| |(deltaZ>振动阈值)){
v、 振动(50);
}
字符串项=currentX.getText().toString()+”,“+currentY.getText().toString()+”,“+currentZ.getText().toString()+”,”;
试一试{
文件sdCard=Environment.getExternalStorageDirectory();
File dir=新文件(sdCard.getAbsolutePath()+“/sean”);
布尔dirsMade=dir.mkdir();
//系统输出打印LN(dirsMade);
Log.v(“Accel”,dirsMade.toString());
文件=新文件(dir,“output.csv”);
FileOutputStream f=新的FileOutputStream(文件);
f=新文件输出流(文件);
试一试{
f、 写入(entry.getBytes());
f、 冲洗();
f、 close();
Toast.makeText(getBaseContext(),“数据已保存”,Toast.LENGTH_LONG.show();
}捕获(IOE异常){
e、 printStackTrace();
}
}catch(filenotfounde异常){
e、 printStackTrace();
}
}
public void displayCleanValues(){
currentX.setText(“0.0”);
当前设置文本(“0.0”);
当前z.setText(“0.0”);
}
//显示当前的x、y、z加速度计值
public void displayCurrentValues(){
currentX.setText(Float.toString(deltaX));
currentY.setText(Float.toString(deltaY));
currentZ.setText(Float.toString(deltaZ));
}
//显示最大x、y、z加速度计值
public void displayMaxValues(){
如果(deltaX>deltaXMax){
deltaXMax=deltaX;
setText(Float.toString(deltaXMax));
}
如果(deltaY>deltaYMax){
deltaYMax=deltaY;
maxY.setText(Float.toString(deltaYMax));
}
如果(deltaZ>deltaZMax){
deltaZMax=deltaZ;
maxZ.setText(Float.toString(deltaZMax));
}
}
私有void checkPermissions(){
int hasWriteContactSubmission=checkSelfPermission(Manifest.permission.WRITE\u外部存储);
if(hasWriteContactSubmission!=已授予PackageManager.PERMISSION){
requestPermissions(新字符串[]{Manifest.permission.WRITE\u EXTERNAL\u STORAGE},REQUEST\u CODE\u ASK\u PERMISSIONS);
返回;
}
Toast.makeText(getBaseContext(),“已授予权限”,Toast.LENGTH_LONG.show();
}
public void onRequestPermissionsResult(int-requestCode、字符串[]权限、int[]grantResults){
开关(请求代码){
案例请求\代码\请求\权限:
if(grantResults[0]==已授予PackageManager.权限){
//准许
Toast.makeText(getBaseContext(),“已授予权限”,Toast.LENGTH_LONG.show();
}否则{
//拒绝许可
Toast.makeText(加速
FileOutputStream f = new FileOutputStream(file);
f = new FileOutputStream(file);
FileOutputStream f = new FileOutputStream(file, true);