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:
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:
Erstellen Sie eine Implementierung von
DeviceStatePolicy.Provider
, die eine Instanz vonBookStyleDeviceStatePolicy
zurückgibt. Die Instanz muss alle erforderlichen Abhängigkeiten wie Sensorobjekte für denBookStyleDeviceStatePolicy
-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); } }
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
Aktualisieren Sie
config_deviceSpecificDeviceStatePolicyProvider
mit dem Klassennamen Ihres Anbieters in der Dateiconfig.xml
, z. B.:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>