0
Help us understand the problem. What are the problem?

posted at

【Android/Kotlin】モーションセンサーを検知する

モーションセンサーとは

ほとんどAndoridには加速度計やジャイロスコープが搭載されていて、そこで検知した内容のことを総称してモーションセンサーと言います。
端末の傾き、振動、回転、地磁気センサーなど端末周りで検知している情報をとっています。
今回はこれを検知する方法を書きます。

SensorEvent

すべてのモーションデータは多次元配列でそれぞれ取得できます。
すべてSensorEventパラメータとfloat型の値をセットで送ってくれますので、同時に全部取得して使うものだけ取り出すということが可能です。

サポートされているモーションセンサー

TYPE_ACCELEROMETER

x, y, z軸の加速力

TYPE_ACCELEROMETER_UNCALIBRATED

x, y, z軸の測定加速度

TYPE_GRAVITY

x, y, z軸の重力

TYPE_GYROSCOPE

x, y, z軸の回転速度

TYPE_GYROSCOPE_UNCALIBRATED

x, y, z軸の回転速度(ドリフト補償なし)とドリフト

TYPE_LINEAR_ACCELERATION

x, y, z軸の加速力(重量を除く)

TYPE_ROTATION_VECTOR

x, y, z軸の回転ベクトル成分(x * sin(θ/2)), 回転ベクトルのスカラー成分((cos(θ/2))

TYPE_STEP_COUNTER

最終再起動時以降、センサーがアクティベートされている間に、ユーザーが歩いた歩数。

よく使われるのは

回転ベクトルセンサーと重力センサーです。
動作検知の対象として回転ベクトルを多く使うので、そこから色々な目的で検知をして利用していくみたいです。
重力センサーは端末の動きの方向性をとりたい場合に有効で使われているようです。

回転ベクトルセンサー取得してみた

sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
rotationVector = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR)

上記のコードで回転ベクトルセンサーが取得できます。
多次元配列で
SensorEvent.values[0]にはx軸のデータ、
SensorEvent.values[1]にはy軸のデータ、
SensorEvent.values[2]にはz軸のデータがありますのでそれぞれ取得。
SensorEvent.values[3]には回転ベクトルのスカラー成分があるので取得。

それぞれ取得した結果を以下のように画面表示。

Screenshot_2022-04-02-13-40-43-09_03acab2a3b1d4696a37e4ffa0cff7f8a.png

以上になります。

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?