前提・実現したいこと
端末が取得した加速度値(Z軸)をSDカードにcsvファイルで保存するアプリを作成したいです。
(こちらのサイトを参考にしました。)
Android端末で、加速度を取得するのはできているのですが、
その値をSDカードに保存するのができないでいます。
AndroidアプリでSdカードに保存すること等について詳しい方、
ご教授いただけると幸いです。
(※)
マニフェストに、以下を追記し、
端末の「設定」→「アプリ」→「権限」→「ストレージON」済みです。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
発生している問題・エラーメッセージ
エラーは特に起きていないです。
シミュレータや実機へのビルドはできていますが、SDカードに保存できていない状況です。
該当のソースコード
java
1package com.example.myexterminalcsv02; 2 3import java.io.BufferedWriter; 4import java.io.FileNotFoundException; 5import java.io.FileOutputStream; 6import java.io.IOException; 7import java.io.OutputStreamWriter; 8import java.io.UnsupportedEncodingException; 9import java.util.Calendar; 10import java.util.List; 11 12import android.app.Activity; 13import android.hardware.Sensor; 14import android.hardware.SensorEvent; 15import android.hardware.SensorEventListener; 16import android.hardware.SensorManager; 17import android.os.Bundle; 18import android.view.View; 19import android.widget.Button; 20import android.widget.TextView; 21 22public class MainActivity extends Activity implements SensorEventListener { 23 24 int Start = 0; 25 26 //SensorManagerのインスタンス 27 private SensorManager sensorManager; 28 29 @Override 30 public void onCreate(Bundle savedInstanceState) { 31 32 super.onCreate(savedInstanceState); 33 34 //SensorManagerのインスタンスを取得 35 sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); 36 37 setContentView(R.layout.activity_main); 38 } 39 40 @Override 41 protected void onResume() 42 { 43 super.onResume(); 44 List<Sensor>sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); 45 //リスナーの登録 46 for(Sensor s : sensors) 47 { 48 sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL ); 49 } 50 } 51 @Override 52 public void onAccuracyChanged(Sensor sensor, int accuracy) { 53 54 } 55 @Override 56 public void onSensorChanged(SensorEvent e) { 57 58 Calendar time = Calendar.getInstance(); 59 60 int hour = time.get(time.HOUR_OF_DAY); 61 int minute = time.get(time.MINUTE); 62 int second = time.get(time.SECOND); 63 int ms = time.get(time.MILLISECOND); 64 65 Button buttonSave = findViewById(R.id.buttonSave); 66 Button buttonStop = findViewById(R.id.buttonStop); 67 68 //保存ボタンを押したら、保存開始 69 buttonSave.setOnClickListener(new View.OnClickListener() { 70 @Override 71 public void onClick(View view) { 72 Start = 1; 73 } 74 }); 75 76 //停止ボタンを押したら、保存終了 77 buttonStop.setOnClickListener(new View.OnClickListener() { 78 @Override 79 public void onClick(View view) { 80 Start = 0; 81 } 82 }); 83 84 String nowtime = (hour) + ":" + (minute) + ":" + (second) + ":" + (ms); 85 86 if (e.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 87 88 TextView z = findViewById(R.id.textViewZ); 89 z.setText("z: " + (e.values[2])); 90 91 if (Start==1) { 92 String FILE = "/sdcard/test.csv"; 93 try { 94 95 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( 96 new FileOutputStream(FILE, true), "UTF-8")); 97 String write_int = nowtime + "," + (e.values[2]) + "\n"; 98 bw.write(write_int); 99 bw.close(); 100 } catch (UnsupportedEncodingException k) { 101 k.printStackTrace(); 102 } catch (FileNotFoundException k) { 103 k.printStackTrace(); 104 } catch (IOException k) { 105 k.printStackTrace(); 106 } 107 } 108 } 109 110 } 111 112 113 @Override 114 protected void onStop() 115 { 116 super.onStop(); 117 sensorManager.unregisterListener(this); 118 } 119}
activity_main.mxlに、
保存ボタン(@+id/buttonSave)、停止ボタン(@+id/buttonStop)を設けて
保存ボタンを押したら取得開始、
停止ボタンを押したら取得終了。
というコードを打っているつもりではいます。
(↓画面)
試したこと
①書籍を参考に、editTextに書かれた文章を内部ストレージに保存するプログラムは作れたので、取得した加速度値をeditTextに自動入力できれば解決できるとは思ったのですが、そのことに詳細なサイトは見つからなかったので不可能かもしれないと考えて断念してます。
(もし、editTextに加速度値を自動入力できるのであれば、それでも解決できるのかなとは考えてます。)
②こちらの質問で記載されていた、
<use-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
をマニフェストに追記したらビルドができなくなったため、書いてないです。
補足情報(FW/ツールのバージョンなど)
ーー開発環境ーー
MacOS.Catalina.10.15
ArduinoIDE1.8.10
AndroidStudio3.5.2
ーーAndroid端末ーー
Elephone P8 Mini(Android OS v7.0)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。