前提・実現したいこと
AndroidStudioで地磁気センサーのログをcsvに変換して内部ストレージに記録するアプリケーションを作成しています。
発生している問題・エラーメッセージ
1.http://androidlab.blog119.fc2.com/blog-entry-20.html#more
1のURLサイトに記載されているソースコード参考に作成にしているのですが,
今実機として使っているGooglePixcel3aには,SDカードが実装されていません.
そのため,内部ストレージにcsvファイルとして書き込みたいのですが,全然わかりません.
2.https://akira-watson.com/android/external-storage-file.html
2のURLサイトをみてやってい見たんですが,どう組み込んでいいかわからず,困っています.
該当のソースコード
Java
ソースコード
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Calendar;
public class MainActivity extends Activity implements SensorEventListener {
//SensorManagerのインスタンス private SensorManager sensorManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //SensorManagerのインスタンスを取得 sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); //リスナーの登録 for(Sensor s : sensors) { sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL ); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent e) { Calendar time = Calendar.getInstance(); int year = time.get(time.YEAR); int month = time.get(time.MONTH); int day = time.get(time.DAY_OF_MONTH); int hour = time.get(time.HOUR_OF_DAY); int minute = time.get(time.MINUTE); int second = time.get(time.SECOND); int ms = time.get(time.MILLISECOND); String nowtime = String.valueOf(year)+";"+String.valueOf(month)+";"+String.valueOf(day)+";"+ String.valueOf(hour)+":"+String.valueOf(minute)+":"+String.valueOf(second)+":"+String.valueOf(ms); switch(e.sensor.getType()) { //地磁気 case Sensor.TYPE_MAGNETIC_FIELD: { String FILE = "/data/test.csv"; try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE, true), "UTF-8")); String write_int =nowtime + "," + String.valueOf(e.values[SensorManager.DATA_X])+"," + String.valueOf(e.values[SensorManager.DATA_Y])+"," + String.valueOf(e.values[SensorManager.DATA_Z])+"\n"; bw.write(write_int); bw.close(); } catch (UnsupportedEncodingException k) { k.printStackTrace(); } catch (FileNotFoundException k) { k.printStackTrace(); } catch (IOException k) { k.printStackTrace(); } TextView x = (TextView)findViewById(R.id.x); x.setText("x" + String.valueOf(e.values[SensorManager.DATA_X])); TextView y = (TextView)findViewById(R.id.y); y.setText("y" + String.valueOf(e.values[SensorManager.DATA_Y])); TextView z = (TextView)findViewById(R.id.z); z.setText("z" + String.valueOf(e.values[SensorManager.DATA_Z])); break; } } } @Override protected void onStop() { super.onStop(); sensorManager.unregisterListener(this); };
}
試したこと
実機にデバックすると,センサの値は,画面上できちんと確認できています.
補足情報(FW/ツールのバージョンなど)
実機は,GooglePixcel3aです.
内部ストレージに保存した場合のCSVデータは,AndroidをPCとつないで,エクスプローラーを開き,Android/data/com.oooo~/の中で確認できるのでしょうか?
たくさん質問をしていますが,どうかご指導をよろしくお願いします.
あなたの回答
tips
プレビュー