در اندروید ۱۱، حالت خواب بیتوجهی (inattentive sleep) یک ویژگی صرفهجویی در مصرف انرژی است که به کاربر اجازه میدهد تا زمان غیرفعال بودن دستگاه را تنظیم کند و پس از آن صفحه نمایش خاموش شود، حتی اگر پنجرههایی با FLAG_KEEP_SCREEN_ON قابل مشاهده باشند یا قفل بیدارباش با سطح FULL_WAKE_LOCK ، SCREEN_BRIGHT_WAKE_LOCK یا SCREEN_DIM_WAKE_LOCK فعال باشد. قفل بیدارباش با سطح PARTIAL_WAKE_LOCK تحت تأثیر این ویژگی قرار نمیگیرد. کمی قبل از انقضای زمان انتظار، پیامی نمایش داده میشود که به کاربر هشدار میدهد در صورت عدم تعامل با دستگاه، دستگاه به حالت خواب میرود.
در این زمینه، فعالیت کاربر به هر چیزی اشاره دارد که باعث فراخوانی PowerManager#userActivity (بدون پرچم USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS ) میشود، از جمله اما نه محدود به:
- تعامل با صفحه لمسی
- فشار دادن یک دکمه فیزیکی
- رویدادهای ورودی از یک وسیله جانبی خارجی (به عنوان مثال، صفحه کلید متصل، ریموت بلوتوث، ریموت مادون قرمز)
- تعامل صوتی
- دریافت برخی پیامهای HDMI CEC، مانند One Touch Play
- شروع دوره جدید بازیگری
سفارشیسازی
اگر این ویژگی فعال باشد، دستگاه پس از مدت زمان مشخصی از عدم فعالیت کاربر، یک هشدار روی صفحه نمایش میدهد. اگر اقدامی انجام نشود، صفحه نمایش خاموش میشود. میتوانید با استفاده از این گزینههای پیکربندی، این ویژگی را سفارشی کنید.
پیکربندی زمانبندی
برای پیکربندی زمان انقضا، عنصر زیر را در frameworks/base/core/res/res/values/config.xml بهروزرسانی کنید:
-
config_attentiveTimeout - زمان پیشفرض عدم فعالیت کاربر را که پس از آن صفحه نمایش خاموش میشود (حتی اگر قفل بیدارباش صفحه نمایش فعال باشد) بر حسب میلیثانیه مشخص میکند.
- در زمان ساخت تنظیم شود.
- اگر مقدار بین
0وconfig_minimumScreenOffTimeoutباشد، زمان انقضا رویconfig_minimumScreenOffTimeoutتنظیم میشود تا از خاموش شدن صفحه نمایش دستگاه اندکی پس از بیدار شدن جلوگیری شود. - پیشفرض:
-1، که این ویژگی را غیرفعال میکند.
لغو زمان انقضای پیشفرض
برای لغو تنظیم پیشفرض timeout، عنصر زیر را بهروزرسانی کنید.
-
Settings.Secure.ATTENTIVE_TIMEOUT - در صورت تنظیم، زمانبندی پیشفرض خواب بیتوجه که توسط
config_attentiveTimeoutتنظیم شده است را لغو میکند. - میتواند در زمان اجرا تنظیم شود.
مدت زمان قبل از نمایش هشدار را پیکربندی کنید
برای پیکربندی مدت زمان، عنصر زیر را در frameworks/base/core/res/res/values/config.xml بهروزرسانی کنید:
-
config_attentiveWarningDuration - مدت زمان نمایش پیام هشدار به کاربر قبل از خاموش شدن صفحه نمایش پس از عدم فعالیت طولانی مدت کاربر.
- مقدار باید بسیار کمتر از زمان تعیینشده برای حالت خواب بیتوجه باشد، در غیر این صورت پنجره هشدار دائماً نمایش داده میشود و نمیتوان آن را نادیده گرفت.
- پیشفرض:
30000(۳۰ ثانیه).
تنظیمات زمانبندی را در TvSettings نمایش دهید
برای نمایش تنظیمات زمانبندی، عنصر زیر را در packages/apps/TvSettings/Settings/res/values/config.xml بهروزرسانی کنید:
-
config_show_standby_timeout - آیا گزینهای برای خاموش کردن صفحه نمایش در حین پخش رسانه نمایش داده شود یا خیر.
- پیشفرض:
false.
منابع برای رابط کاربری هشدار
- طرحبندی پنجرهی هشدار در
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xmlتعریف شده است. - رشتههای زیر برای کادر محاورهای در
frameworks/base/packages/SystemUI/res/values/strings.xmlوframeworks/base/packages/SystemUI/res-product/values/strings.xmlتعریف شدهاند. -
inattentive_sleep_warning_title -
inattentive_sleep_warning_message
پیکربندیهای زمان ساخت و منابع را میتوان با همپوشانی منابع تغییر داد.
پیادهسازی
با استفاده از دستور زیر، این ویژگی را فعال کنید.
- مقدار پیشفرض
config_attentiveTimeoutرا لغو کنید. - اگر از
TvSettingsAOSP استفاده میکنید: - با لغو
config_show_standby_timeoutاین ویژگی را در تنظیمات غیرفعال کنید. - تنظیمات خودتان را که شامل
Settings.Secure.ATTENTIVE_TIMEOUTمیشود، پیادهسازی کنید.
اعتبارسنجی
تستهای CTS برای این ویژگی در cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java قرار دارند.
مثالها و منابع
-
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.javaشامل پیادهسازی پیشفرض رابط کاربری هشدار است. -
packages/apps/TvSettingsمثالی از نحوهی نمایش این ویژگی در تنظیمات ارائه میدهد.
مثال مورد آزمون دستی
اگر HAL سلامت دستگاه را گزارش میدهد که دستگاه باتری دارد (
battery_presentمقدارtrueدارد) مطمئن شوید که تنظیمات توسعهدهندهیstay_on_while_plugged_inخاموش باشد، زیرا این ممکن است مانع از خاموش شدن صفحه نمایش توسط این ویژگی شود.
adb shell settings put global stay_on_while_plugged_in 0- زمان خواب بیتوجهی را طوری تنظیم کنید که چند ثانیه بیشتر از مدت زمان کادر هشدار باشد.
adb shell settings put secure attentive_timeout 32000 - پخش یک ویدیو را شروع کنید (برای فعال کردن قفل بیدارباش صفحه نمایش).
- مطمئن شوید که پنجره هشدار خواب پس از چند ثانیه ظاهر میشود.
- مطمئن شوید که صفحه نمایش پس از پایان زمان تعیین شده خاموش میشود.