質問編集履歴

1 書式の改善

Horin

Horin score 9

2016/12/12 10:53  投稿

Android端末でジャイロセンサーと加速度センサーの値をSDカードに書き込む
前提・実現したいこと  
Android端末でジャイロセンサーと加速度センサーの値をSDカードに表示したいのですが、ジャイロセンサーの値と加速度センサーの値が同じになってしまいます。
一応ボタンを9つ用意してどのボタンを押したかと時刻も表示するのですがそれに関しては解決しています。
発生している問題  
データを確認すると,加速度の値とジャイロセンサーの値が同じになっている  
 
試したこと  
break;を足してみるとジャイロの値は0になってしまう  
 
ソースコード  
package com.example.g1323073.parameterapp;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
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.Calendar;
import java.util.List;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
   public int button_flag = -1;
   // SDカードの場所を取得
   private String sdPath = Environment.getExternalStorageDirectory() + "/sdcard/sample.csv";
   //SensorManagerのインスタンス
   private SensorManager sensorManager;
   private float[] aValues = new float[3];
   private float[] gValues = new float[3];
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       //SensorManagerのインスタンスを取得
       sensorManager= (SensorManager)this.getSystemService(SENSOR_SERVICE);
       //加速度センサー取得
       Sensor accelerationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
       Sensor gyroScope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
       setContentView(R.layout.activity_main);
       //ボタンの定義
       Button button_speed = (Button) findViewById(R.id.speed);
       Button button_distance = (Button) findViewById(R.id.distance);
       Button button_time = (Button) findViewById(R.id.time);
       Button button_heart = (Button) findViewById(R.id.heart);
       Button button_inclination = (Button) findViewById(R.id.inclination);
       Button button_high = (Button) findViewById(R.id.high);
       Button button_cadence = (Button) findViewById(R.id.cadence);
       Button button_calorie = (Button) findViewById(R.id.calorie);
       Button button_etc = (Button) findViewById(R.id.etc);
       button_speed.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 8;
           }
       });
       button_distance.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 7;
           }
       });
       button_time.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 6;
           }
       });
       button_heart.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 5;
           }
       });
       button_inclination.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 4;
           }
       });
       button_high.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 3;
           }
       });
       button_cadence.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 2;
           }
       });
       button_calorie.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 1;
           }
       });
       button_etc.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               button_flag = 0;
           }
       });
   }
   @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) {
       // TODO Auto-generated method stub
   }
   @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(hour)+";"+String.valueOf(minute)+";"+String.valueOf(second)+";"+String.valueOf(ms);
       switch(e.sensor.getType()) {
           //加速度
           case Sensor.TYPE_ACCELEROMETER:
               //
               aValues[0] = (e.values[0]);
               aValues[1] = (e.values[1]);
               aValues[2] = (e.values[2]);
           case Sensor.TYPE_GYROSCOPE:
               gValues[0] = (e.values[0]);
               gValues[1] = (e.values[1]);
               gValues[2] = (e.values[2]);
                   String FILE;
                   FILE = "/sdcard/sample.csv";
                   try {
                       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE, true), "UTF-8"));
                       String write_int = nowtime +
                               ",加速度:" +
                               String.valueOf(aValues[0]) + "," +
                               String.valueOf(aValues[1]) + "," +
                               String.valueOf(aValues[2]) +"," +
                               ",ジャイロ:" +
                               String.valueOf(gValues[0]) + "," +
                               String.valueOf(gValues[1]) + "," +
                               String.valueOf(gValues[2]) +",flag" +
                               String.valueOf(button_flag) + "/n";
                       bw.write(write_int);
                       //
                       bw.newLine();
                       //
                       bw.close();
                   } catch (UnsupportedEncodingException k) {
                       k.printStackTrace();
                   } catch (FileNotFoundException k) {
                       k.printStackTrace();
                   } catch (IOException k) {
                       k.printStackTrace();
                   }
                   break;
       }
   }
   @Override
   protected void onStop() {
       super.onStop();
       sensorManager.unregisterListener(this);
   };
}
}
開発環境
Android Studio
  • Java

    23741 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    10076 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    6467 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る