در دستگاههای تاشو به سبک کتاب، میتوانید پشتیبانی از حالتهای خیمهای (tent) و گوهای (wedge) را فعال کنید.
حالتهای خیمهای و گوهای به شما امکان میدهند وقتی دستگاه کمی باز است، از صفحه نمایش بیرونی استفاده کنید، همانطور که در شکل زیر نشان داده شده است:

شکل ۱. حالتهای تاشوی چادری و گوهای.
در حالت چادری، دستگاه تا حدی باز است و از هر دو نیمه برای پشتیبانی از خود مانند یک چادر استفاده میکند. در حالت گوهای، دستگاه روی نیمه راست خود که صاف روی یک سطح قرار میگیرد، تکیه داده میشود.
اندروید ۱۶ و بالاتر با استفاده از BookStyleDeviceStatePolicy به عنوان سیاست وضعیت دستگاه شما، از این رفتار پشتیبانی میکند. این سیاست روی یک دستگاه تاشو با دو صفحه نمایش به سبک کتاب کار میکند، که لولا در هنگام تا شدن در سمت چپ دستگاه قرار دارد.
این سیاست باعث میشود صفحه نمایش بیرونی در شرایط خاص، مثلاً در حالت باز، مدت زمان بیشتری روشن بماند:
- نیمه سمت راست دستگاه عمدتاً صاف است که نشان میدهد دستگاه احتمالاً در حالت گوهای قرار دارد.
- جهت دستگاه به صورت افقی معکوس است که نشان میدهد احتمالاً در حالت چادری قرار دارد.
- جهت صفحه نمایش افقی یا افقی معکوس است.
- یک برنامه وجود دارد که قفل بیدارباش صفحه نمایش را نگه میدارد (از تایم اوت شدن صفحه جلوگیری میکند).
این سیاست حالت جداگانهای برای دستگاه در حالت چادری یا گوهای ارائه نمیدهد؛ بلکه حالت بسته را برای طیف وسیعتری از زوایای لولا تحت این شرایط خاص حفظ میکند.
برای پشتیبانی کامل از این اکتشافات، دستگاه به موارد زیر نیاز دارد:
- حسگر زاویه لولا که زاویه بین دو نیمه دستگاه را گزارش میدهد
- حسگر شتابسنج در هر دو نیمه (چپ و راست) دستگاه
حالت چادری یا سهگوش را پیکربندی کنید
برای فعال کردن پشتیبانی از حالتهای tent و wedge در دستگاه خود، این مراحل را دنبال کنید:
یک پیادهسازی از
DeviceStatePolicy.Providerایجاد کنید که نمونهای ازBookStyleDeviceStatePolicyرا برمیگرداند. این نمونه باید تمام وابستگیهای لازم، مانند اشیاء حسگر، را برای سازندهیBookStyleDeviceStatePolicyفراهم کند.مثال زیر یک پیادهسازی را نشان میدهد:
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); } }ارائه دهنده خط مشی را به مسیر کلاس سرور سیستم اضافه کنید. با ایجاد یک کتابخانه با کلاس ارائه دهنده خط مشی وضعیت دستگاه که در مرحله قبل ایجاد کردید، شروع کنید.
مثال زیر پیکربندی طرح Soong
Android.bpرا نشان میدهد:java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }سپس، برای افزودن این کتابخانه به سرور سیستم، فایل makefile دستگاه را با افزودن خطوط زیر تغییر دهید:
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-servicesبرای مثال،
config_deviceSpecificDeviceStatePolicyProviderبه نام کلاس ارائهدهنده خود در فایلconfig.xmlبهروزرسانی کنید:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>