ヒンジ角度センサーの API
ヒンジ角度は 0 から 360 の値です。
- 0 - デバイスは閉じています (画面が互いに向き合い、表示されていません)
- 90 - デバイスは "L" の形で、向きに応じてノート配置またはブック配置とも呼ばれます。
- 180 - デバイスはフラット
- 360 - 画面は互いに離れて向き合い、1 つの画面のみが動作するように、デバイスは折りたたまれています。
ヒント
このコード サンプルは、Surface Duo でのヒンジ角度センサー用に記述されています。
Jetpack Window Manager には、さまざまな製造元のデバイスで機能する配置 (閉、開、半開など) に関する情報を提供する DeviceState
API が用意されています。
コードの例
ヒンジ角度は、Hinge Angle
センサー名で構成された Android のセンサー マネージャーを使用して測定できます。
private val HINGE_ANGLE_SENSOR_NAME = "Hinge Angle"
private var mSensorManager: SensorManager? = null
private var mHingeAngleSensor: Sensor? = null
private var mSensorListener: SensorEventListener? = null
// call setupSensors from onCreate
private fun setupSensors() {
mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val sensorList: List<Sensor> = mSensorManager!!.getSensorList(Sensor.TYPE_ALL)
for (sensor in sensorList) {
if (sensor.getName().contains(HINGE_ANGLE_SENSOR_NAME)) {
mHingeAngleSensor = sensor
}
}
mSensorListener = object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor == mHingeAngleSensor) {
val angle = event.values[0].toInt()
//TODO something with angle
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
//TODO (if required)
}
}
}
override fun onPause() {
super.onPause()
if (mHingeAngleSensor != null) {
mSensorManager?.unregisterListener(mSensorListener, mHingeAngleSensor)
}
}
override fun onResume() {
super.onResume()
if (mHingeAngleSensor != null) {
mSensorManager?.registerListener(
mSensorListener,
mHingeAngleSensor,
SensorManager.SENSOR_DELAY_NORMAL
)
}
}