ใน Android 11 การนอนหลับโดยไม่ตั้งใจเป็นฟีเจอร์ประหยัดพลังงานที่ช่วยให้ผู้ใช้สามารถตั้งค่าการหมดเวลาการไม่ใช้งานของผู้ใช้หลังจากที่หน้าจอปิดลง แม้ว่าหน้าต่างที่มี FLAG_KEEP_SCREEN_ON
จะมองเห็นได้หรือมีการล็อค Wakelock ระดับ FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
หรือ SCREEN_DIM_WAKE_LOCK
ไว้ก็ตาม Wakelock ที่มีระดับ PARTIAL_WAKE_LOCK
จะไม่ได้รับผลกระทบจากคุณสมบัตินี้ ไม่นานก่อนที่ระยะหมดเวลาจะสิ้นสุดลง ระบบจะแสดงข้อความเพื่อเตือนผู้ใช้ว่าอุปกรณ์จะเข้าสู่โหมดสลีปหากไม่ได้โต้ตอบกับอุปกรณ์
ในบริบทนี้ กิจกรรมผู้ใช้อ้างอิงถึงสิ่งใดก็ตามที่ทริกเกอร์การเรียก PowerManager#userActivity
(โดยไม่มีแฟล็ก USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
) รวมถึงแต่ไม่จำกัดเพียง:
- การโต้ตอบกับหน้าจอสัมผัส
- การกดปุ่มทางกายภาพ
- ป้อนข้อมูลเหตุการณ์จากอุปกรณ์เสริมภายนอก (เช่น แป้นพิมพ์ที่เชื่อมต่อ รีโมทบลูทูธ รีโมท IR)
- การโต้ตอบด้วยเสียง
- การรับข้อความ HDMI CEC บางอย่าง เช่น One Touch Play
- กำลังเริ่มเซสชั่นนักแสดงใหม่
การปรับแต่ง
หากเปิดใช้งานคุณสมบัติ อุปกรณ์จะแสดงคำเตือนบนหน้าจอหลังจากไม่มีการใช้งานของผู้ใช้เป็นระยะเวลาหนึ่ง หากไม่มีการดำเนินการใดๆ หน้าจอจะปิดลง คุณสามารถปรับแต่งคุณสมบัติได้โดยใช้ตัวเลือกการกำหนดค่าเหล่านี้
กำหนดค่าการหมดเวลา
หากต้องการกำหนดค่าการหมดเวลา ให้อัพเดตอิลิเมนต์ต่อไปนี้ใน frameworks/base/core/res/res/values/config.xml
:
-
config_attentiveTimeout
- ระบุเวลาเริ่มต้นในหน่วยมิลลิวินาทีที่ผู้ใช้ไม่มีการใช้งานหลังจากที่หน้าจอปิดลง (แม้ว่าจะใช้งาน Wakelock ของหน้าจอก็ตาม)
- ตั้งเวลาสร้าง
- หากค่าอยู่ระหว่าง
0
ถึงconfig_minimumScreenOffTimeout
การหมดเวลาจะถูกตั้งค่าเป็นconfig_minimumScreenOffTimeout
เพื่อป้องกันไม่ให้อุปกรณ์ปิดหน้าจอไม่นานหลังจากตื่นนอน - ค่าเริ่มต้น:
-1
ซึ่งปิดใช้งานคุณลักษณะนี้
แทนที่การหมดเวลาเริ่มต้น
หากต้องการแทนที่การตั้งค่าการหมดเวลาเริ่มต้น ให้อัปเดตองค์ประกอบต่อไปนี้
-
Settings.Secure.ATTENTIVE_TIMEOUT
- หากตั้งค่าไว้ จะแทนที่การหมดเวลาพักเครื่องโดยไม่ตั้งใจที่เป็นค่าเริ่มต้นซึ่งกำหนดโดย
config_attentiveTimeout
- สามารถตั้งค่าตอนรันไทม์ได้
กำหนดระยะเวลาก่อนที่คำเตือนจะปรากฏขึ้น
หากต้องการกำหนดคอนฟิกระยะเวลา ให้อัพเดตอิลิเมนต์ต่อไปนี้ใน frameworks/base/core/res/res/values/config.xml
:
-
config_attentiveWarningDuration
- ระยะเวลาที่จะแสดงข้อความเตือนแก่ผู้ใช้ก่อนที่หน้าจอจะดับลงหลังจากที่ผู้ใช้ไม่มีการใช้งานเป็นเวลานาน
- ค่าควรต่ำกว่าระยะหมดเวลาการนอนหลับโดยไม่ตั้งใจที่ตั้งไว้มาก มิฉะนั้นกล่องโต้ตอบคำเตือนจะแสดงอย่างต่อเนื่องและไม่สามารถปิดได้
- ค่าเริ่มต้น:
30000
(30 วินาที)
แสดงการตั้งค่าการหมดเวลาใน TvSettings
หากต้องการแสดงการกำหนดค่าตามความชอบการหมดเวลา ให้อัพเดตอิลิเมนต์ต่อไปนี้ใน packages/apps/TvSettings/Settings/res/values/config.xml
:
-
config_show_standby_timeout
- จะแสดงรายการกำหนดลักษณะเพื่อให้สามารถปิดหน้าจอระหว่างการเล่นสื่อได้หรือไม่
- ค่าเริ่มต้น:
false
ทรัพยากรสำหรับ UI คำเตือน
- โครงร่างของไดอะล็อกคำเตือนถูกกำหนดไว้ใน
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
- หากใช้ AOSP
TvSettings
: - ปิดการใช้งานคุณสมบัติในการตั้งค่าโดยการแทนที่
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
มีการใช้งาน UI คำเตือนเริ่มต้น -
packages/apps/TvSettings
ให้ตัวอย่างวิธีเปิดเผยคุณสมบัติในการตั้งค่า
ตัวอย่างกรณีทดสอบด้วยตนเอง
ตรวจสอบให้แน่ใจว่าการตั้งค่าของนักพัฒนา
stay_on_while_plugged_in
ปิดอยู่ หาก HAL สุขภาพของอุปกรณ์รายงานว่าอุปกรณ์มีแบตเตอรี่ (battery_present
เป็นtrue
) เนื่องจากอาจทำให้ฟีเจอร์นี้ไม่สามารถปิดหน้าจอได้
adb shell settings put global stay_on_while_plugged_in 0
- ตั้งค่าการหมดเวลาการนอนหลับโดยไม่ตั้งใจให้มากกว่าระยะเวลาของกล่องโต้ตอบคำเตือนสองสามวินาที
adb shell settings put secure attentive_timeout 32000
- เริ่มเล่นวิดีโอ (เพื่อรับการปลุกหน้าจอ)
- ตรวจสอบว่ากล่องโต้ตอบคำเตือนการนอนหลับปรากฏขึ้นหลังจากผ่านไปไม่กี่วินาที
- ตรวจสอบว่าหน้าจอปิดลงหลังจากหมดเวลาที่กำหนด