API do sensor de ângulo de dobradiça
O ângulo da dobradiça é um valor de 0 a 360:
- 0 – O dispositivo está fechado (as telas estão voltadas uma para a outra e não estão visíveis)
- 90 – O dispositivo está em formato de "L", também conhecido como postura de laptop ou postura de livro, dependendo da orientação
- 180 – O dispositivo está em uma postura plana
- 360 – O dispositivo está dobrado de modo que as telas fiquem voltadas uma para a outra e apenas uma tela esteja operando
Dica
Este exemplo de código foi gravado para o sensor de ângulo da dobradiça no Surface Duo.
O Gerenciador de Janelas do Jetpack tem uma API DeviceState
que fornece informações sobre postura (por exemplo, fechada, aberta, semiaberta) que funciona em dispositivos de vários fabricantes.
Exemplo de código
O ângulo da dobradiça pode ser medido usando o gerenciador de sensores do Android configurado com o nome do sensor 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
)
}
}