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

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

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

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

Android Studio

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

解決済

androidでボタンを押した後,等間隔で加速度を保存する

km16
km16

総合スコア10

Java

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

Android Studio

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

1回答

0評価

0クリップ

246閲覧

投稿2022/07/25 12:38

編集2022/07/29 04:04

前提

android studioで加速度センサーの値を端末に保存するアプリを作ろうとしています.
Saveボタンを押す→5秒間加速度を測定&保存→測定終了→Saveボタンを押す→・・・(繰り返し)
という流れを行おうと考えてます.

実現したいこと

Timerクラスのscheduleメソッドを用いて測定&保存の部分を等間隔で行いたい.

発生している問題・エラーメッセージ

Saveボタンを押しても何も起こらない

該当のソースコード

java

package com.example.accelerationtent_hozon_test; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.FileNameMap; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { float x,y,z; //加速度の値を格納する変数 MyTimerTask timerTask = null; //onClickメソッドでインスタンス生成 Timer mTimer = null; //onClickメソッドでインスタンス生成 Handler mHandler = new Handler(); //UI Threadへのpost用ハンドラ SensorManager sensorManager; //センサーマネージャー Sensor accelSensor; //加速度センサー MySensorEventListener mySensorEventListener; //センサーのイベントリスナー TextView textViewX; //Z軸方向の加速度表示 TextView textViewY; //Z軸方向の加速度表示 TextView textViewZ; //Z軸方向の加速度表示 TextView textViewHYOUKI; //保存状態の表記 Button buttonSave; //測定開始ボタン String FileName; //保存時のファイル名(保存開始日時) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //テキスト,ボタンの登録 textViewX = findViewById(R.id.textViewX); textViewY = findViewById(R.id.textViewY); textViewZ = findViewById(R.id.textViewZ); textViewHYOUKI = findViewById(R.id.textViewHYOUKI); buttonSave = findViewById(R.id.buttonSave); // SensorManagerを取得する sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); // 加速度センサーを取得する accelSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); if( accelSensor==null ){ //加速度センサ-を取得できなかった場合 Toast.makeText(this, "加速度センサーが使えません", Toast.LENGTH_SHORT).show(); } } @Override protected void onResume(){ super.onResume(); if( accelSensor!=null ){//加速度センサーが取得できた場合 mySensorEventListener = new MySensorEventListener(); sensorManager.registerListener(mySensorEventListener, //センサーの登録 accelSensor, 10000); } } //ボタンが押されたときの挙動 public class timerActivity extends Activity implements View.OnClickListener { public void onClick(View v) { Button btn = (Button) v; switch (btn.getId()) { //Saveボタンが押されたとき case R.id.buttonSave: if (mTimer == null) { //保存時のファイル名の取得(ボタンを押した日時) Calendar cl = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); FileName =sdf.format(cl.getTime()); //タイマーの初期化処理 timerTask = new MainActivity.MyTimerTask(); mTimer = new Timer(true); mTimer.schedule(timerTask, 100, 100); } break; default: //それ以外の時 break; } } } //mTimer.scheduleの挙動 class MyTimerTask extends TimerTask{ @Override public void run() { // mHandlerを通じてUI Threadへ処理をキューイング mHandler.post( new Runnable() { public void run() { textViewX.setText("X: " + (x)); textViewY.setText("Y: " + (y)); textViewZ.setText("Z: " + (z)); OutputStream out; try { out = openFileOutput(FileName+".csv", MODE_APPEND); PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, "UTF-8")); writer.append((x) + (", ") + (y) + (", ") + (z) + ("\n")); //各座標を書き込む writer.close(); } catch (IOException e){ e.printStackTrace(); } } }); } } class MySensorEventListener implements SensorEventListener{ @Override public void onSensorChanged(SensorEvent sensorEvent) { //センサーの値を取得する x = sensorEvent.values[0]; y = sensorEvent.values[1]; z = sensorEvent.values[2]; } public void onAccuracyChanged(Sensor sensor, int i){ } } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textViewX" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginTop="90dp" android:text="X" android:textSize="20sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="MissingConstraints" /> <TextView android:id="@+id/textViewY" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="Y" android:textSize="20sp" app:layout_constraintStart_toStartOf="@+id/textViewX" app:layout_constraintTop_toBottomOf="@+id/textViewX" tools:ignore="MissingConstraints" /> <TextView android:id="@+id/textViewZ" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="Z" android:textSize="20sp" app:layout_constraintStart_toStartOf="@+id/textViewY" app:layout_constraintTop_toBottomOf="@+id/textViewY" tools:ignore="MissingConstraints" /> <Button android:id="@+id/buttonSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="160dp" android:layout_marginTop="74dp" android:text="Save" android:textSize="20sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textViewHYOUKI" tools:ignore="MissingConstraints" /> <TextView android:id="@+id/textViewHYOUKI" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="40dp" android:layout_marginTop="216dp" android:textSize="30sp" app:layout_constraintStart_toStartOf="@+id/textViewY" app:layout_constraintTop_toBottomOf="@+id/textViewY" tools:ignore="MissingConstraints" /> </androidx.constraintlayout.widget.ConstraintLayout>

現在5秒間測定の部分は考えずに単純にSaveボタンを押したら保存開始というようなプログラムをかこうとしています.

試したこと

timerActivityクラスやMyTimerTaskクラスの位置が悪いのかと思ったのですがどのように配置すれば良いか分かりませんでした.

補足情報(FW/ツールのバージョンなど)

androidエミュレータのAPI31で実行しました.

参考にしたサイト
加速度の保存の仕方を参考:https://teratail.com/questions/228703
timerクラスの使い方を参考:https://techbooster.org/android/application/934/

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2022/07/25 14:28

質問に付けられている button タグは、 html の <button> のことです。関係無いと思われます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android Studio

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