はじめに
Androidでジャイロスコープを使用する方法について解説。
公式のリファレンスには、以下のように記述されている。
ジャイロスコープは、端末の x、y、z 軸周りの回転速度を rad/s で測定します。
コード
- センサーイベントリスナー(
SensorEventListener
)インターフェースを継承。 - センサーマネージャー(
sensorManager
)を定義し、onResume
時にリスナーを登録、onPause
時にリスナーを解除する。 -
onSensorChanged
メソッド内でジャイロ検知を行う。
MainActivity.kt
class MainActivity : AppCompatActivity(), SensorEventListener {
/** ViewBinding */
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
/** センサーマネージャー */
private val sensorManager by lazy { getSystemService(SENSOR_SERVICE) as SensorManager }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}
override fun onResume() {
super.onResume()
val gyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE)
if (gyroscope != null) sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onPause() {
super.onPause()
sensorManager.unregisterListener(this)
}
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type == Sensor.TYPE_GYROSCOPE) {
val sensorX = event.values[0]
val sensorY = event.values[1]
val sensorZ = event.values[2]
//TODO ここに処理を記載
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}