Sui dispositivi pieghevoli in stile libro, puoi attivare il supporto per le modalità tenda e cuneo.
Le modalità tenda e cuneo ti consentono di utilizzare lo schermo esterno quando il dispositivo è leggermente aperto, come mostrato nella figura seguente:

Figura 1. Posizioni pieghevoli a tenda e cuneo.
Nella modalità tenda, il dispositivo è parzialmente aperto e utilizza entrambe le metà per sostenersi come una tenda. Nella modalità cuneo, il dispositivo è appoggiato sulla metà destra, che è piatta su una superficie.
Android 16 e versioni successive supportano questo comportamento utilizzando
BookStyleDeviceStatePolicy come norma sullo stato del dispositivo. Questa norma funziona su un dispositivo pieghevole con due schermi in stile libro, con la cerniera situata sul lato sinistro del dispositivo quando è piegato.
Questa norma mantiene lo schermo esterno acceso più a lungo quando si apre in determinate condizioni, ad esempio:
- La metà destra del dispositivo è per lo più piatta, il che indica che è probabilmente in modalità cuneo.
- L'orientamento del dispositivo è orizzontale inverso, il che indica che è probabilmente in modalità tenda.
- L'orientamento dello schermo è orizzontale o orizzontale inverso.
- Un'app mantiene attivo il blocco di riattivazione dello schermo (impedendo il timeout dello schermo).
La norma non introduce uno stato del dispositivo separato per la posizione a tenda o supporto inclinato; mantiene lo stato chiuso per una gamma più ampia di angoli della cerniera in queste condizioni specifiche.
Per supportare completamente queste euristiche, il dispositivo deve avere:
- Sensore dell'angolo della cerniera che segnala l'angolo tra le due metà del dispositivo
- Sensore accelerometro su ciascuna metà (sinistra e destra) del dispositivo
Configurare la modalità tenda o cuneo
Segui questi passaggi per attivare il supporto per la modalità tenda e cuneo sul tuo dispositivo:
Crea un'implementazione di
DeviceStatePolicy.Providerche restituisce un'istanza diBookStyleDeviceStatePolicy. L'istanza deve fornire tutte le dipendenze necessarie, come gli oggetti sensore, al costruttoreBookStyleDeviceStatePolicy.Il seguente esempio mostra un'implementazione:
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); } }Aggiungi il provider di norme al classpath del server di sistema. Inizia creando una libreria con la classe del provider di norme sullo stato del dispositivo che hai creato nel passaggio precedente.
Il seguente esempio mostra una configurazione del progetto Soong
Android.bp:java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }Quindi, per aggiungere questa libreria al server di sistema, modifica il makefile del dispositivo aggiungendo le seguenti righe:
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-servicesAggiorna
config_deviceSpecificDeviceStatePolicyProvideral nome della classe del tuo provider nel fileconfig.xml, ad esempio:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>