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:

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:
Erstellen Sie eine Implementierung von
DeviceStatePolicy.Provider, die eine Instanz vonBookStyleDeviceStatePolicyzurückgibt. Die Instanz muss alle erforderlichen Abhängigkeiten wie Sensorobjekte für den KonstruktorBookStyleDeviceStatePolicybereitstellen.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); } }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-servicesAktualisieren Sie
config_deviceSpecificDeviceStatePolicyProviderin derconfig.xmlDatei auf den Klassennamen Ihres Anbieters, z. B.:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>