Scharnierwinkelsensor-API
Der Scharnierwinkel ist ein Wert zwischen 0 und 360:
- 0: Das Gerät ist geschlossen (die Bildschirme zeigen gegeneinander und sind nicht sichtbar)
- 90: Das Gerät hat eine L-Form, die abhängig von der Ausrichtung auch als Laptopposition oder Buchposition bezeichnet wird
- 180: Das Gerät ist flach
- 360: Das Gerät ist so gefaltet, dass die Bildschirme in die entgegengesetzte Richtung weisen und nur ein Bildschirm aktiv ist
Tipp
Dieses Codebeispiel wurde für den Scharnierwinkelsensor im Surface-Duo geschrieben.
Der Jetpack-Fenster-Manager verfügt über eine DeviceState
-API, die Informationen zur Position (z. B. geschlossen, geöffnet, halb geöffnet) bereitstellt und auf Geräten von mehreren Herstellern funktioniert.
Codebeispiel
Der Scharnierwinkel kann mit dem Sensor-Manager von Android gemessen werden, der mit dem Namen des Hinge Angle
-Sensors konfiguriert wurde.
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
)
}
}