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