簡體   English   中英

Android將Accelecrometer和Gryo日志的流數據保存到文本文件

[英]Android save stream data of Accelecrometer and Gryo log to text file

我正在嘗試記錄加速度計和gro數據並將其保存在文本或csv文件中以進行分析,盡管我能夠在中流式傳輸數據,但不知道如何將日志信息保存在文本文件中。

import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.mbientlab.metawear.AsyncOperation;
import com.mbientlab.metawear.Message;
import com.mbientlab.metawear.MetaWearBleService;
import com.mbientlab.metawear.MetaWearBoard;
import com.mbientlab.metawear.RouteManager;
import com.mbientlab.metawear.UnsupportedModuleException;
import com.mbientlab.metawear.data.CartesianFloat;
import com.mbientlab.metawear.module.Accelerometer;
import com.mbientlab.metawear.module.Debug;
import com.mbientlab.metawear.module.Gyro;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity implements ServiceConnection ,Runnable{

    private static final String LOG_TAG1="A",LOG_TAG="G",   ACCEL_DATA="accel_data",GYRO_DATA="gyro_data";
    private MetaWearBleService.LocalBinder serviceBinder;
    private MetaWearBoard mwBoard;
    private Accelerometer accelModule;
    private Gyro gyroModule;
    private Debug debugModule;

    private String filename = "MySampleFile.txt";
    private String filepath = "MyFileStorage";
    File myInternalFile;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getApplicationContext().bindService(new Intent(this, MetaWearBleService.class), this, Context.BIND_AUTO_CREATE);

        ContextWrapper contextWrapper=new ContextWrapper(getApplicationContext());
        File directory=contextWrapper.getDir(filepath,Context.MODE_PRIVATE);
        if(!directory.exists()){
            directory.mkdir();
        }
        myInternalFile=new File(directory,filename);

//Start the Thread//
        findViewById(R.id.start_accel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                t1.start();
                t2.start();
            }

        });
//Stop Streaming Accelerometer and Gyro//

    findViewById(R.id.stop_accel).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            accelModule.stop();
            gyroModule.stop();
        }
    });


        findViewById(R.id.reset_accel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                debugModule.resetDevice();
            }
        });

//Save log file, Create a folder in internal storage//
        findViewById(R.id.save_data).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    FileOutputStream fos= new FileOutputStream(myInternalFile);
                    fos.write(LOG_TAG1.getBytes());
                    fos.close();
                    Toast.makeText(getApplicationContext(), "record saved", Toast.LENGTH_LONG).show();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        });
    }
//Unbinding Bluetooth//
    @Override
    public void onDestroy(){
        super.onDestroy();
        getApplicationContext().unbindService(this);
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        serviceBinder = (MetaWearBleService.LocalBinder)service;

        final String mwMacAdress= "F7:31:B8:53:9C:8F";
        BluetoothManager btManager=(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        BluetoothDevice btDeveice= btManager.getAdapter().getRemoteDevice(mwMacAdress);

        mwBoard=serviceBinder.getMetaWearBoard(btDeveice);
        mwBoard.setConnectionStateHandler(new MetaWearBoard.ConnectionStateHandler() {
            @Override
            public void connected() {
                super.connected();
                Log.i(LOG_TAG,"Connected");

                try {
                    accelModule = mwBoard.getModule(Accelerometer.class);
                    accelModule.setAxisSamplingRange(2.f);
                    accelModule.setOutputDataRate(50.f);
                    accelModule.routeData().fromAxes().stream(ACCEL_DATA).commit()
                            .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
                                @Override
                                public void success(RouteManager result) {
                                    result.subscribe(ACCEL_DATA, new RouteManager.MessageHandler() {
                                        @Override
                                        public void process(Message message) {
                                            Log.i(LOG_TAG1, message.getData(CartesianFloat.class).toString());

                                        }
                                    });
                                }
                            });
                    debugModule=mwBoard.getModule(Debug.class);
                } catch (UnsupportedModuleException e) {
                    Log.i(LOG_TAG,"cannot find module",e);

                }
                try {
                    gyroModule=mwBoard.getModule(Gyro.class);
                    gyroModule.setAngularRateRange(125.f);
                    gyroModule.setOutputDataRate(25.f);
                    gyroModule.routeData().fromAxes().stream(GYRO_DATA).commit()
                            .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
                                @Override
                                public void success(RouteManager result) {
                                    result.subscribe(GYRO_DATA, new RouteManager.MessageHandler() {
                                        @Override
                                        public void process(Message message) {
                                             Log.i(LOG_TAG, message.getData(CartesianFloat.class).toString());
                                        }
                                    });
                                }
                            });
                    debugModule=mwBoard.getModule(Debug.class);

                } catch (UnsupportedModuleException e){
                    Log.i(LOG_TAG,"cannot find module", e);
                }
            }

            @Override
            public void disconnected() {
                Log.i(LOG_TAG,"Disconnected");
            }
        });
        mwBoard.connect();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
//Threading //
    public void run() {
    }
    Thread t1 = new Thread() {
        public void run() {
            try {
                accelModule.enableAxisSampling();
                accelModule.start();
            } catch (Exception e) {
            }
        }

};
    Thread t2 = new Thread() {
        public void run() {
            try {
                gyroModule.start();
            }catch (Exception e){}
        }
    };

首先,創建一個將字符串附加到文件的函數,例如:

private void appendToFile(String str) {
  File file = getFileStreamPath("test.txt");
  if (!file.exists()) {
    file.createNewFile();
  }
  FileOutputStream writer = openFileOutput(file.getName(), MODE_APPEND | MODE_WORLD_READABLE);
  writer.write(str.getBytes());
  writer.flush();
  writer.close();
}

現在,不用打電話

Log.i(LOG_TAG, message.getData(CartesianFloat.class).toString());

只需致電:

appendToFile(message.getData(CartesianFloat.class).toString());

或您要存儲在文件中的其他任何信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM