質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Android

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

Android Studio

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

Q&A

解決済

1回答

3574閲覧

Android端末で描画中に加速度センサのタイムスタンプを取得する

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/06/23 14:22

編集2017/06/24 11:53

###前提・実現したいこと
Androidにおいて描画中の端末の加速度センサの値を取得するアプリを作っています。
センサの値を取得し、そのときのタイムスタンプを取得したいと思っています。
ここ(http://androidlab.blog119.fc2.com/blog-entry-20.html)を参考にして作成したのですが、描画中のXY座標のタイムスタンプは取得できたものの、センサのタイムスタンプが取得できませんでした。
まだアプリ作成初心者なのもありますが、何かよい方法があれば教えていただきたいです。
よろしくお願いします。
開発環境はAndroidstudioになります。

###ソースコード(追記)

Java

1 2import java.util.ArrayList; 3import java.util.List; 4import java.util.Calendar; 5 6import android.app.Activity; 7import android.content.Intent; 8import android.hardware.Sensor; 9import android.hardware.SensorEvent; 10import android.hardware.SensorEventListener; 11import android.hardware.SensorManager; 12import android.os.Bundle; 13import android.view.Menu; 14import android.view.MenuItem; 15import android.widget.Toast; 16 17public class SensorActivity extends Activity implements SensorEventListener{ 18 19 private SensorManager sensorManager; 20 21 DrawNoteView view; 22 private static final int MENU_CLEAR = 0; 23 private static final int MENU_SAVE = 1; 24 private String ID; 25 26 27 // 加速度センサーの値 28 private float[] accelerometerValues = new float[3]; 29 30 ArrayList<Float> accelx = new ArrayList<Float>(); 31 ArrayList<Float> accely = new ArrayList<Float>(); 32 ArrayList<Float> accelz = new ArrayList<Float>(); 33 34 ArrayList<String> sensortime = new ArrayList<String>(); 35 36 float x; 37 float y; 38 float z; 39 String Stime; 40 41 42 @Override 43 public void onCreate(Bundle savedInstanceState) { 44 super.onCreate(savedInstanceState); 45 view = new DrawNoteView(getApplication()); 46 setContentView(view); 47 Intent intent = getIntent(); 48 ID = intent.getStringExtra("keyword"); 49 50 //SensorManagerのインスタンスを取得 51 sensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); 52 } 53 54 @Override 55 protected void onResume() { 56 super.onResume(); 57 58 List<Sensor>sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); 59 //リスナーの登録 60 for(Sensor s : sensors) 61 { 62 sensorManager.registerListener(this,s,SensorManager.SENSOR_DELAY_NORMAL ); 63 } 64 65 66 } 67 68 @Override 69 public void onAccuracyChanged(Sensor sensor, int accuracy) { 70 } 71 72 @Override 73 public void onSensorChanged(SensorEvent event) { 74 75 Calendar time = Calendar.getInstance(); 76// int year = time.get(time.YEAR); 77// 78// int month = time.get(time.MONTH); 79// 80// int day = time.get(time.DAY_OF_MONTH); 81 82 int hour = time.get(time.HOUR_OF_DAY); 83 84 int minute = time.get(time.MINUTE); 85 86 int second = time.get(time.SECOND); 87 88 int ms = time.get(time.MILLISECOND); 89 90 Stime = String.valueOf(hour)+":"+String.valueOf(minute)+":"+String.valueOf(second)+":" +String.valueOf(ms); 91 92 switch(event.sensor.getType()) 93 { 94 95 //加速度 96 case Sensor.TYPE_ACCELEROMETER: { 97 98 accelerometerValues = event.values.clone(); 99 100 sensortime.add(Stime); 101 102 x = accelerometerValues[0]; 103 y = accelerometerValues[1]; 104 z = accelerometerValues[2]; 105 106accelx.add(x); 107 accely.add(y); 108 accelz.add(z); 109 110 break; 111 } 112 } 113 } 114 115 /** メニューの生成イベント */ 116 117 @Override 118 public boolean onCreateOptionsMenu(Menu menu) { 119 super.onCreateOptionsMenu(menu); 120 menu.add(0, MENU_CLEAR, 0, "Clear"); 121 menu.add(0, MENU_SAVE, 0, "Save"); 122 return true; 123 } 124 /** メニューがクリックされた時のイベント */ 125 @Override 126 public boolean onOptionsItemSelected(MenuItem item) { 127 switch ( item.getItemId() ) { 128 case MENU_CLEAR: 129 view.clearDrawList(); 130 break; 131 132 case MENU_SAVE: 133 134 135 exec_post(); 136 137 138 break; 139 } 140 return true; 141 } 142 143// POST通信を実行(AsyncTaskによる非同期処理を使うバージョン) 144 private void exec_post() { 145 // 非同期タスクを定義 146 HttpPostTask task = new HttpPostTask( 147 this, 148 149 150 151 152 // タスク完了時に呼ばれるUIのハンドラ 153 new HttpPostHandler(){ 154 155 @Override 156 public void onPostCompleted(String response) { 157 // 受信結果をUIに表示 158// 159 } 160 161 @Override 162 public void onPostFailed(String response) { 163 Toast.makeText( 164 getApplicationContext(), 165 "エラーが発生しました。", 166 Toast.LENGTH_LONG 167 ).show(); 168 } 169 } 170 ); 171 172 173 for(int i = 0; i <accelx.size(); i++){ 174 task.addPostParam( "accelerometer_No[]", i ); 175 task.addPostParam2( "aX[]", accelx.get(i)); 176 task.addPostParam2("aY[]", accely.get(i)); 177 task.addPostParam2("aZ[]", accelz.get(i)); 178 } 179 180 for(int i = 0; i <view.drawnowtime_list.size(); i++){ 181 task.addPostParam( "drawtime_No[]", i ); 182 task.addPostParam3( "drawtime[]", view.drawnowtime_list.get(i) ); 183 } 184 185 task.addPostParam3( "ID", ID ); 186 187 for(int i = 0; i <sensortime.size(); i++) { 188 task.addPostParam( "sensortime_No[]", i ); 189 task.addPostParam3("sensortime[]", sensortime.get(i)); 190 } 191 192 // タスクを開始 193 task.execute(); 194 195 196 } 197} 198

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コードを見る限り、時間文字列は取得できていると思いますが、何が取得できていないのでしょうか?

また、SensorEventにはtimestampフィールドというイベントが発生したタイムスタンプを保持するフィールドがあります。
このフィールドを使うと良いですよ。

投稿2017/06/24 00:47

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/24 05:56 編集

回答ありがとうございます。 私もできるはずだと思ってやっていたのですが、エミュレータで実行し、通信・出力を行うと、描画中の時間は同様のプログラムで取得できたのに対して、センサを取得した時間は"1"だけしか返ってきませんでした。 timestampフィールドについて調べてみます。
退会済みユーザー

退会済みユーザー

2017/06/24 11:52

エミュレータではなく、実機でデバックしたところ描画、センサの取得した時間データが出るようになりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問