Kitap tarzı katlanabilir cihazlarda üçgen ve kama modları için desteği etkinleştirebilirsiniz.
Çadır ve kama modlarında, cihaz biraz açıkken dış ekranı kullanabilirsiniz. Bu durum aşağıdaki şekilde gösterilmiştir:
1. şekil. Çadır ve kama şeklinde katlanabilir duruşlar.
Çadır modunda cihaz kısmen açıktır ve bir çadır gibi kendi kendini desteklemek için her iki yarısını da kullanır. Kama modunda cihaz, bir yüzeyin üzerinde düz duran sağ yarısı üzerine yerleştirilir.
Android 16 ve sonraki sürümlerde, cihaz durumu politikası olarak BookStyleDeviceStatePolicy
kullanılarak bu davranış desteklenir. Bu politika, katlandığında menteşesi cihazın sol tarafında bulunan, kitap tarzında iki ekranlı katlanabilir cihazlarda çalışır.
Bu politika, belirli koşullarda katı açılırken dış ekranın daha uzun süre açık kalmasını sağlar. Örneğin:
- Cihazın sağ yarısı çoğunlukla düzdür. Bu, cihazın muhtemelen kama modunda olduğunu gösterir.
- Cihazın yönü ters yatay olarak ayarlanmış. Bu, cihazın muhtemelen çadır modunda olduğunu gösterir.
- Ekran yönü yatay veya ters yatay olmalıdır.
- Ekran uyanık kalma kilidi tutan (ekran zaman aşımını engelleyen) bir uygulama vardır.
Bu politika, çadır veya kama duruşu için ayrı bir cihaz durumu sunmaz. Bu özel koşullar altında, daha geniş bir menteşe açısı aralığında kapalı durumu korur.
Bu sezgisel yöntemlerin tam olarak desteklenmesi için cihazın şunları yapması gerekir:
- Cihazın iki yarısı arasındaki açıyı bildiren menteşe açısı sensörü
- Cihazın her iki yarısında (sol ve sağ) ivme ölçer sensörü
Çadır veya kama modunu yapılandırma
Cihazınızda çadır ve kama modu desteğini etkinleştirmek için aşağıdaki adımları uygulayın:
DeviceStatePolicy.Provider
öğesinin,BookStyleDeviceStatePolicy
örneğini döndüren bir uygulamasını oluşturun. Örnek,BookStyleDeviceStatePolicy
oluşturucusuna sensör nesneleri gibi gerekli tüm bağımlılıkları sağlamalıdır.Aşağıdaki örnekte bir uygulama gösterilmektedir:
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); } }
Politika sağlayıcıyı sistem sunucusunun sınıf yoluna ekleyin. Önceki adımda oluşturduğunuz cihaz durumu politikası sağlayıcı sınıfıyla bir kitaplık oluşturarak başlayın.
Aşağıdaki örnekte bir Soong
Android.bp
plan yapılandırması gösterilmektedir:java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }
Ardından, bu kitaplığı sistem sunucusuna eklemek için aşağıdaki satırları ekleyerek cihazın makefile dosyasını değiştirin:
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-services
config.xml
dosyasındaconfig_deviceSpecificDeviceStatePolicyProvider
kısmını sağlayıcınızın sınıf adıyla güncelleyin. Örneğin:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>