端末依存で最大・最低・間隔が決まるので,確認用のコードを書いた。
メモです。
Logcatに周期が[ns]で出力される
package com.example.getrotationtest
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.opengl.Matrix
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import java.io.BufferedReader
import java.io.File
import java.io.InputStreamReader
import java.math.BigDecimal
import java.util.*
import kotlin.properties.Delegates
import kotlin.io.*
import kotlin.math.PI
class MainActivity : AppCompatActivity(), SensorEventListener {
private var mManager: SensorManager by Delegates.notNull<SensorManager>()
private var mSensor: Sensor by Delegates.notNull<Sensor>()
private var maSensor: Sensor by Delegates.notNull<Sensor>()
private var mgSensor: Sensor by Delegates.notNull<Sensor>()
private var prevtime = 0L
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main);
mManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
mSensor = mManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
maSensor = mManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
mgSensor = mManager.getDefaultSensor(Sensor.TYPE_GRAVITY)
}
override fun onSensorChanged(event: SensorEvent) {
when (event.sensor.type) {
Sensor.TYPE_ACCELEROMETER -> {
Log.d("tag", (event.timestamp - prevtime).toString())
prevtime = event.timestamp
}
}
}
//センサー精度が変更されたときに発生するイベント
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
}
//アクティビティが閉じられたときにリスナーを解除する
override fun onPause() {
super.onPause()
//リスナーを解除しないとバックグラウンドにいるとき常にコールバックされ続ける
mManager.unregisterListener(this)
}
override fun onResume() {
super.onResume()
//リスナーとセンサーオブジェクトを渡す
//第一引数はインターフェースを継承したクラス、今回はthis
//第二引数は取得したセンサーオブジェクト
//第三引数は更新頻度 SensorManagerから選択するか,usで指定する
mManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_FASTEST)
mManager.registerListener(this, maSensor, 238000) // 加速度のセンサ
mManager.registerListener(this, mgSensor, SensorManager.SENSOR_DELAY_FASTEST)
}
}