API sensor sudut engsel

Sudut engsel adalah nilai dari 0 hingga 360:

  • 0 - perangkat ditutup (layar saling berhadapan, dan tidak terlihat)
  • 90 - perangkat adalah bentuk "L", juga dikenal sebagai postur laptop atau postur buku tergantung pada orientasi
  • 180 - perangkat datar
  • 360 - perangkat dilipat sehingga layar menghadap menjauh satu sama lain dan hanya satu layar yang beroperasi

Tip

Sampel kode ini ditulis untuk sensor sudut engsel pada Surface Duo.

Jetpack Window Manager memiliki DeviceState API yang menyediakan informasi tentang postur (misalnya tertutup, terbuka, setengah terbuka) yang berfungsi pada perangkat dari beberapa produsen.

Contoh kode

Sudut engsel dapat diukur menggunakan manajer sensor Android yang dikonfigurasi Hinge Angle dengan nama sensor.

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
        )
    }
}