Teilen über


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