ヒンジ角度センサーの 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
        )
    }
}