API датчика угла разворота
Угол разворота может принимать значения от 0 до 360:
- 0 — устройство закрыто (экраны повернуты друг к другу и не видны).
- 90 — устройство имеет вид буквы L (также называется ноутбучной позицией) или книги в зависимости от ориентации.
- 180 — устройство полностью развернуто.
- 360 — устройство сложено таким образом, что экраны повернуты друг от друга и работает только один экран.
Совет
Этот пример кода написан для датчика угла разворота в Surface Duo.
The Jetpack Window Manager содержит API DeviceState
, который предоставляет сведения о состоянии (закрыто, открыто, полуоткрыто) для устройств различных производителей.
Пример кода
Угол разворота можно измерить с помощью диспетчера датчиков Android, настроенного с именем датчика Hinge Angle
.
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
)
}
}