Zelt- und Keilpositionen

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

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

Zelt- und Keil-Faltmodi

Abbildung 1 : Faltbare Geräte im Zelt- und Keilmodus

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

Android 16 und höher unterstützt dieses Verhalten mit BookStyleDeviceStatePolicy als Richtlinie für den Gerätezustand. Diese Richtlinie funktioniert auf einem faltbaren Gerät mit zwei Bildschirmen 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 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 Ausrichtung des Geräts ist umgekehrt im Querformat, was darauf hindeutet, dass es sich wahrscheinlich im Zeltmodus befindet.
  • Die Bildschirmausrichtung ist im Querformat oder umgekehrt im Querformat.
  • Eine App hält eine Bildschirmsperre (verhindert das Ausschalten des Bildschirms).

Die Richtlinie führt keinen separaten Gerätezustand für den Zelt- oder Keilmodus ein. Sie behält den geschlossenen Zustand für einen größeren Bereich von Scharnierwinkeln unter diesen spezifischen Bedingungen bei.

Damit diese Heuristiken vollständig unterstützt werden können, benötigt das Gerät Folgendes:

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

Zelt- oder Keilmodus konfigurieren

So aktivieren Sie die Unterstützung für den 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 Konstruktor BookStyleDeviceStatePolicy 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 Klasse des Richtlinienanbieters für den Gerätezustand, die Sie im vorherigen Schritt erstellt haben.

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

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

    Wenn Sie diese Bibliothek dem Systemserver hinzufügen möchten, ändern Sie die Make-Datei 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 in der config.xml Datei auf den Klassennamen Ihres Anbieters, z. B.:

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