ใน Android 11 การปิดหน้าจอเมื่อไม่มีการใช้งานเป็นฟีเจอร์ประหยัดพลังงานที่อนุญาตให้ตั้งค่าการหมดเวลาเมื่อไม่มีการใช้งานของผู้ใช้ หลังจากนั้นหน้าจอจะปิด แม้ว่าหน้าต่างที่มี 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) ซึ่งรวมถึงแต่ไม่จำกัดเพียงสิ่งต่อไปนี้
- การโต้ตอบกับหน้าจอสัมผัส
- การกดปุ่มบนตัวเครื่อง
- เหตุการณ์อินพุตจากอุปกรณ์เสริมภายนอก (เช่น แป้นพิมพ์ที่เชื่อมต่อ รีโมตบลูทูธ รีโมต IR)
- การโต้ตอบด้วยเสียง
- การรับข้อความ HDMI CEC บางอย่าง เช่น One Touch Play
- การเริ่มเซสชันการแคสต์ใหม่
การปรับแต่ง
หากเปิดใช้ฟีเจอร์นี้ อุปกรณ์จะแสดงคำเตือนบนหน้าจอหลังจากไม่มีการใช้งานของผู้ใช้ตามระยะเวลาที่ระบุ หากไม่มีการดำเนินการใดๆ หน้าจอจะปิด คุณสามารถปรับแต่งฟีเจอร์นี้ได้โดยใช้ตัวเลือกการกำหนดค่าต่อไปนี้
กำหนดค่าการหมดเวลา
หากต้องการกำหนดค่าการหมดเวลา ให้อัปเดตองค์ประกอบต่อไปนี้ใน frameworks/base/core/res/res/values/config.xml
config_attentiveTimeout- ระบุเวลาเริ่มต้นเป็นมิลลิวินาทีที่ไม่มีการใช้งานของผู้ใช้ หลังจากนั้นหน้าจอจะปิด (แม้ว่าจะมีการล็อกการทำงานของหน้าจออยู่)
- ตั้งค่าในระหว่างเวลาบิลด์
- หากค่าอยู่ระหว่าง
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_titleinattentive_sleep_warning_message
คุณสามารถเปลี่ยนการกำหนดค่าและทรัพยากรในเวลาบิลด์ได้โดยใช้การวางซ้อนทรัพยากร
การใช้งาน
เปิดใช้ฟีเจอร์โดยใช้สิ่งต่อไปนี้
- ลบล้าง
config_attentiveTimeoutเริ่มต้น - หากใช้
TvSettingsของ AOSP ให้ทำดังนี้ - ปิดใช้ฟีเจอร์ในการตั้งค่าโดยลบล้าง
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- ตั้งค่าการหมดเวลาเมื่อไม่มีการใช้งานให้มากกว่าระยะเวลาของกล่องโต้ตอบคำเตือน 2-3 วินาที
adb shell settings put secure attentive_timeout 32000 - เริ่มเล่นวิดีโอ (เพื่อรับการล็อกการทำงานของหน้าจอ)
- ตรวจสอบว่ากล่องโต้ตอบคำเตือนการเข้าสู่โหมดสลีปปรากฏขึ้นหลังจากผ่านไป 2-3 วินาที
- ตรวจสอบว่าหน้าจอจะปิดหลังจากหมดเวลาที่ตั้งไว้