حالت های چادری و گوه ای

در دستگاه‌های تاشو به سبک کتاب، می‌توانید پشتیبانی از حالت‌های چادر و گوه را فعال کنید.

حالت‌های چادر و گوه به شما امکان می‌دهند وقتی دستگاه کمی باز است از صفحه بیرونی استفاده کنید، همانطور که در شکل زیر نشان داده شده است:

حالت های چادر و گوه تاشو

شکل 1. وضعیت های تاشو چادر و گوه.

در حالت چادر، دستگاه تا حدی باز است و از هر دو نیمه برای پشتیبانی از خود مانند یک چادر استفاده می کند. در حالت گوه ای، دستگاه در نیمه سمت راست خود که صاف روی یک سطح قرار دارد، قرار می گیرد.

Android 16 و بالاتر با استفاده از BookStyleDeviceStatePolicy به عنوان خط‌مشی وضعیت دستگاه شما از این رفتار پشتیبانی می‌کند. این خط‌مشی روی دستگاهی تاشو با دو صفحه‌نمایش به‌سبک کتابی کار می‌کند که لولای آن در سمت چپ دستگاه هنگام تا شدن قرار دارد.

به عنوان مثال ، این خط مشی صفحه بیرونی را در هنگام آشکار شدن در شرایط خاص ، طولانی تر نگه می دارد:

  • نیمه سمت راست دستگاه عمدتاً صاف است که نشان می دهد دستگاه احتمالاً در حالت گوه است.
  • جهت دستگاه افقی معکوس است، که نشان می دهد احتمالاً در حالت چادری است.
  • جهت صفحه نمایش افقی یا معکوس است.
  • برنامه ای وجود دارد که قفل صفحه نمایش را نگه می دارد (جلوگیری از مهلت زمانی صفحه).

این خط‌مشی حالت دستگاه جداگانه‌ای را برای وضعیت چادر یا گوه معرفی نمی‌کند. حالت بسته را برای طیف وسیع تری از زوایای لولا تحت این شرایط خاص حفظ می کند.

برای پشتیبانی کامل از این اکتشافات، دستگاه به موارد زیر نیاز دارد:

  • سنسور زاویه لولا که زاویه بین دو نیمه دستگاه را گزارش می کند
  • سنسور شتاب سنج در هر نیمه (چپ و راست) دستگاه

حالت چادر یا گوه را پیکربندی کنید

برای فعال کردن پشتیبانی از حالت چادر و گوه در دستگاه خود، این مراحل را دنبال کنید:

  1. یک پیاده سازی از 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);
        }
    }
    
  2. ارائه دهنده خط مشی را به مسیر کلاس سرور سیستم اضافه کنید. با ایجاد یک کتابخانه با کلاس ارائه دهنده خط مشی وضعیت دستگاه که در مرحله قبل ایجاد کردید، شروع کنید.

    مثال زیر یک پیکربندی طرح اولیه Soong Android.bp را نشان می دهد:

    java_library {
        name: "my-device-services",
        installable: true,
        system_ext_specific: true,
        srcs: [
            "src/**/*.java"
        ],
        libs: [
            "services",
        ],
    }
    

    سپس، برای افزودن این کتابخانه به سرور سیستم، با افزودن خطوط زیر، فایل ساخت دستگاه را تغییر دهید:

    # Add system service libraries (they contain device-specific policies)
    PRODUCT_SYSTEM_SERVER_JARS += \
        my-device-services
    PRODUCT_PACKAGES += \
        my-device-services
    
  3. به عنوان مثال config_deviceSpecificDeviceStatePolicyProvider به نام کلاس ارائه دهنده خود در فایل config.xml به روز کنید:

    <string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>