Di perangkat foldable bergaya buku, Anda dapat mengaktifkan dukungan untuk mode tenda dan wedge.
Mode tenda dan wedge memungkinkan Anda menggunakan layar luar saat perangkat sedikit terbuka, seperti yang ditunjukkan pada gambar berikut:
Gambar 1. Postur perangkat foldable tenda dan wedge.
Dalam mode tenda, perangkat terbuka sebagian, menggunakan kedua bagian untuk menopang dirinya sendiri seperti tenda. Dalam mode wedge, perangkat ditopang di bagian kanan, yang terletak rata di atas permukaan.
Android 16 dan yang lebih tinggi mendukung perilaku ini dengan menggunakan
BookStyleDeviceStatePolicy
sebagai kebijakan status perangkat Anda. Kebijakan ini berfungsi
di perangkat foldable dengan dua layar dalam gaya buku, dengan engsel yang terletak
di sisi kiri perangkat saat dilipat.
Kebijakan ini membuat layar luar tetap aktif lebih lama saat perangkat dibuka dalam kondisi tertentu, misalnya:
- Setengah bagian kanan perangkat sebagian besar datar, yang menunjukkan bahwa perangkat kemungkinan dalam mode wedge.
- Orientasi perangkat adalah lanskap terbalik, yang menunjukkan bahwa perangkat kemungkinan berada dalam mode tenda.
- Orientasi layar adalah lanskap atau lanskap terbalik.
- Ada aplikasi yang menahan layar tetap aktif (mencegah waktu tunggu layar).
Kebijakan ini tidak memperkenalkan status perangkat terpisah untuk postur tenda atau baji; kebijakan ini mempertahankan status tertutup untuk rentang sudut engsel yang lebih luas dalam kondisi tertentu ini.
Untuk mendukung sepenuhnya heuristik ini, perangkat memerlukan:
- Sensor sudut engsel melaporkan sudut antara dua bagian perangkat
- Sensor akselerometer di setiap bagian (kiri dan kanan) perangkat
Mengonfigurasi mode tenda atau wedge
Ikuti langkah-langkah berikut untuk mengaktifkan dukungan mode tenda dan wedge di perangkat Anda:
Buat implementasi
DeviceStatePolicy.Provider
yang menampilkan instanceBookStyleDeviceStatePolicy
. Instance harus menyediakan semua dependensi yang diperlukan, seperti objek sensor, ke konstruktorBookStyleDeviceStatePolicy
.Contoh berikut menunjukkan penerapan:
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); } }
Tambahkan penyedia kebijakan ke classpath server sistem. Mulai dengan membuat library dengan class penyedia kebijakan status perangkat yang Anda buat di langkah sebelumnya.
Contoh berikut menunjukkan konfigurasi blueprint Soong
Android.bp
:java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }
Kemudian, untuk menambahkan library ini ke server sistem, ubah makefile perangkat dengan menambahkan baris berikut:
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-services
Perbarui
config_deviceSpecificDeviceStatePolicyProvider
ke nama kelas penyedia Anda dalam fileconfig.xml
, misalnya:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>