2016-04-16 7 views
0

私は加速度計とgroデータを記録し、分析のためにテキストまたはCSVファイルに保存しようとしていますが、データをにストリームすることはできますが、ログ情報をテキストファイルに保存する方法を理解している。AccelecrometerとGryoのストリームデータをテキストファイルに保存する

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){} 
     } 
    }; 
+0

この回答は、「ファイルを追加する方法」の正しい方向を導くかもしれません:http://stackoverflow.com/questions/4542318/android-append -text-file – NSimon

+0

Thans @NicolasSimon。私はリンクから、テキストファイルにログファイルを追加する必要があることを理解しました。 – AlphabateCoder

+0

@ NicolasSimon私は、リンクから、私は[タグ:添付]テキストファイルのログファイルを理解する必要があります。私はJavaで非常に新しく、[タグ:log.i]を変数に格納するのに苦労しているので、[tag:osw.append]()で使用できるように教えてください。 – AlphabateCoder

答えて

0

まず、など、文字列をファイルに追加する関数を作成:今すぐ

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()); 

その他の情報をファイルに保存する

+0

ありがとう、Thisまさに私が必要としていたものです。 – AlphabateCoder

+0

加速度計とジャイロを2つの別々のファイルに保存できます。 [tag:adb] [tag:shell]からしかアクセスできない場合は、ファイルを内部ストレージに保存し、USBを使用して携帯電話に接続する方法を提案できますか?私の電話は外付けSDカードを受け付けていないことに注意してください。 – AlphabateCoder

+0

データは20ミリ秒ごとに到着するでしょう....私はストリームを頻繁に開いたり閉じたりするのは分かりません。 –

関連する問題