Zelt- und Keilpositionen

Auf faltbaren Geräten im Buchstil können Sie die Unterstützung für den Zelt- und den Keilmodus aktivieren.

Im Zelt- und Keilmodus können Sie das äußere Display verwenden, wenn das Gerät leicht geöffnet ist, wie in der folgenden Abbildung dargestellt:

Zelt- und Keil-Faltmodi

Abbildung 1: Zelt- und Keil-Faltpositionen.

Im Zeltmodus ist das Gerät teilweise geöffnet und beide Hälften stützen es wie ein Zelt. Im Keilmodus wird das Gerät auf der rechten Hälfte aufgestellt, die flach auf einer Oberfläche liegt.

In Android 16 und höher wird dieses Verhalten durch die Verwendung von BookStyleDeviceStatePolicy als Richtlinie für den Gerätestatus unterstützt. Diese Richtlinie funktioniert auf einem faltbaren Gerät mit zwei Displays im Buchstil, wobei sich das Scharnier im zusammengeklappten Zustand auf der linken Seite des Geräts befindet.

Diese Richtlinie sorgt dafür, dass der äußere Bildschirm beim Aufklappen unter bestimmten Bedingungen länger eingeschaltet bleibt, z. B.

  • Die rechte Hälfte des Geräts ist größtenteils flach, was darauf hindeutet, dass sich das Gerät wahrscheinlich im Keilmodus befindet.
  • Die Geräteausrichtung ist das umgekehrte Querformat, was darauf hindeutet, dass sich das Gerät wahrscheinlich im Zeltmodus befindet.
  • Die Bildschirmausrichtung ist Querformat oder umgekehrtes Querformat.
  • Eine App hält einen Bildschirm-Wakelock (verhindert das Zeitlimit für die Inaktivität des Bildschirms).

Die Richtlinie führt keinen separaten Gerätezustand für Zelt- oder Keilaufstellung ein. Der geschlossene Zustand bleibt unter diesen spezifischen Bedingungen für einen größeren Bereich von Scharnierwinkeln erhalten.

Damit diese Heuristiken vollständig unterstützt werden, muss das Gerät Folgendes bieten:

  • Scharnierwinkelsensor, der den Winkel zwischen den beiden Hälften des Geräts erfasst
  • Beschleunigungsmesser auf jeder Hälfte des Geräts (links und rechts)

Zelt- oder Keilmodus konfigurieren

So aktivieren Sie die Unterstützung für Zelt- und Keilmodus auf Ihrem Gerät:

  1. Erstellen Sie eine Implementierung von DeviceStatePolicy.Provider, die eine Instanz von BookStyleDeviceStatePolicy zurückgibt. Die Instanz muss alle erforderlichen Abhängigkeiten wie Sensorobjekte für den BookStyleDeviceStatePolicy-Konstruktor bereitstellen.

    Das folgende Beispiel zeigt eine Implementierung:

    package com.example;
    
    public class MyDevicePolicyProvider implements DeviceStatePolicy.Provider {
    
        @Override
        public DeviceStatePolicy instantiate(@NonNull Context context) {
            final SensorManager sensorManager = context.getSystemService(SensorManager.class);
            final Sensor hingeAngleSensor =
                    sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE, /* wakeUp= */ true);
    
            final List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
            final Sensor hallSensor = CollectionUtils.find(sensors,
                    (sensor) -> Objects.equals(sensor.getStringType(),
                            "com.example.hall_effect"));
    
            final Sensor rightAccelerometerSensor = CollectionUtils.find(sensors,
                    (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 0"));
            final Sensor leftAccelerometerSensor = CollectionUtils.find(sensors,
                    (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 1"));
    
            // You can pass a non-null value here to disable tent/wedge mode logic,
            // so the displays switch will always happen at the fixed hinge angle.
            // This might be useful, for example, when in a retail demo mode where
            // the hinge angle range of the device is limited.
            final Integer closeAngleDegrees = null;
    
            return new BookStyleDeviceStatePolicy(new FeatureFlagsImpl(), context,
    hingeAngleSensor, hallSensor, leftAccelerometerSensor, rightAccelerometerSensor, closeAngleDegrees);
        }
    }
    
  2. Fügen Sie den Richtlinienanbieter dem Klassenpfad des Systemservers hinzu. Erstellen Sie zuerst eine Bibliothek mit der Geräte statusrichtlinienanbieterklasse, die Sie im vorherigen Schritt erstellt haben.

    Das folgende Beispiel zeigt eine Soong-Android.bp-Blueprint-Konfiguration:

    java_library {
        name: "my-device-services",
        installable: true,
        system_ext_specific: true,
        srcs: [
            "src/**/*.java"
        ],
        libs: [
            "services",
        ],
    }
    

    Um diese Bibliothek dem Systemserver hinzuzufügen, bearbeiten Sie das Make-File des Geräts und fügen Sie die folgenden Zeilen hinzu:

    # Add system service libraries (they contain device-specific policies)
    PRODUCT_SYSTEM_SERVER_JARS += \
        my-device-services
    PRODUCT_PACKAGES += \
        my-device-services
    
  3. Aktualisieren Sie config_deviceSpecificDeviceStatePolicyProvider mit dem Klassennamen Ihres Anbieters in der Datei config.xml, z. B.:

    <string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>