على الأجهزة القابلة للطي التي تشبه الكتب، يمكنك تفعيل وضعَي الخيمة والإسفين.
يتيح لك وضعا الخيمة والإسفين استخدام الشاشة الخارجية عندما يكون الجهاز مفتوحًا قليلاً، كما هو موضّح في الشكل التالي:

الشكل 1: وضعا الخيمة والإسفين للأجهزة القابلة للطي
في وضع الخيمة، يكون الجهاز مفتوحًا جزئيًا، ويستخدم كلا النصفَين لدعم نفسه مثل الخيمة. في وضع الإسفين، يتم إسناد الجهاز على نصفه الأيمن، الذي يكون مسطحًا على سطح ما.
يتوافق الإصدار Android 16 والإصدارات الأحدث مع هذا السلوك باستخدام
BookStyleDeviceStatePolicy كسياسة حالة الجهاز. تعمل هذه السياسة على جهاز قابل للطي بشاشتَين على شكل كتاب، مع وجود المفصلة على الجانب الأيسر من الجهاز عند طيّه.
تحافظ هذه السياسة على تشغيل الشاشة الخارجية لفترة أطول عند فتح الجهاز في ظروف معيّنة، مثلاً:
- يكون النصف الأيمن من الجهاز مسطحًا في الغالب، ما يشير إلى أنّ الجهاز من المحتمل أن يكون في وضع الإسفين.
- يكون اتجاه الجهاز أفقيًا معكوسًا، ما يشير إلى أنّه من المحتمل أن يكون في وضع الخيمة.
- يكون اتجاه الشاشة أفقيًا أو أفقيًا معكوسًا.
- هناك تطبيق يحافظ على تشغيل الشاشة (ما يمنع انتهاء مهلة الشاشة).
لا تقدّم السياسة حالة جهاز منفصلة لوضع الخيمة أو الإسفين، بل تحافظ على الحالة المغلقة لنطاق أوسع من زوايا المفصلة في هذه الظروف المحدّدة.
للحصول على الدعم الكامل لهذه الإرشادات، يحتاج الجهاز إلى ما يلي:
- مستشعر زاوية المفصلة الذي يعرض الزاوية بين نصفَي الجهاز
- مستشعر مقياس التسارع على كل نصف (الأيمن والأيسر) من الجهاز
ضبط وضع الخيمة أو الإسفين
اتّبِع الخطوات التالية لتفعيل دعم وضعَي الخيمة والإسفين على جهازك:
أنشئ عملية تنفيذ لـ
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>