センサーを使う
ほとんどのAndroid端末には加速度計、ジャイロスコープ等のセンサーが搭載されています。端末によってはこれら以外にも様々なセンサーが搭載されています。
Androidで利用できるセンサーの種類はこのページの "表 1. Android プラットフォームでサポートされているセンサータイプ" を参照してください。
センサーのモニタリング
センサーのモニタリング
センサーの測定データをモニタリングするには、ActivityにSensorEventListener
インターフェースを継承し、
onSensorChanged()
=> センサーの値が更新されたときのメソッド
onAccuracyChanged()
=> センサーの精度が変更されたときのメソッド
の2つを実装する必要があります。
さらに、使用するセンサーの管理のためSessionManagerクラスを利用します。
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
次に、Sensor.TYPE_XXX(使用したいセンサー)を引数にしてgetDefaultSensor()メソッドを呼ぶことでセンサーを指定します。
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY)
最後にモニタリングの開始、停止の実装が必要です。onResume()、onPause()メソッドを使用することで、Activityが表示されているときのみモニタリングをするようにできます。
override fun onResume() {
super.onResume()
sensor.also {
sensorManager.registerListener(this, it, SensorManager.SENSOR_DELAY_NORMAL)
}
}
override fun onPause() {
super.onPause()
sensorManager.unregisterListener(this)
}
重力センサーの値を表示するサンプルコード
重力センサーの値を表示するサンプルコード
class MainActivity : AppCompatActivity(), SensorEventListener {
private lateinit var sensorManager: SensorManager
private var mGravity: Sensor? = null
private lateinit var sensorX: TextView
private lateinit var sensorY: TextView
private lateinit var sensorZ: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
mGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY)
sensorX = findViewById(R.id.sensorX)
sensorY = findViewById(R.id.sensorY)
sensorZ = findViewById(R.id.sensorZ)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
}
override fun onSensorChanged(event: SensorEvent) {
sensorX.text = event.values[0].toString()
sensorY.text = event.values[1].toString()
sensorZ.text = event.values[2].toString()
}
override fun onResume() {
super.onResume()
mGravity.also {
sensorManager.registerListener(this, it, SensorManager.SENSOR_DELAY_NORMAL)
}
}
override fun onPause() {
super.onPause()
sensorManager.unregisterListener(this)
}
}