ใน Android 11 โหมดสลีปเมื่อไม่มีการใช้งานเป็นฟีเจอร์ประหยัดพลังงานที่ช่วยให้คุณตั้งค่าระยะหมดเวลาของผู้ใช้ที่ไม่ได้ใช้งานได้ ซึ่งหลังจากนั้นหน้าจอจะปิดลง แม้ว่าจะมีหน้าต่างที่มี FLAG_KEEP_SCREEN_ON
แสดงอยู่หรือมีการใช้ Wake Lock ระดับ FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
หรือ SCREEN_DIM_WAKE_LOCK
อยู่ก็ตาม
Wakelock ที่มีระดับ PARTIAL_WAKE_LOCK
จะไม่ได้รับผลกระทบจากฟีเจอร์นี้
ก่อนที่ระยะหมดเวลาจะหมดอายุไม่นาน ระบบอาจแสดงข้อความเพื่อเตือนผู้ใช้ว่าอุปกรณ์จะเข้าสู่โหมดสลีปถ้าไม่ได้โต้ตอบกับอุปกรณ์
ในบริบทนี้ กิจกรรมของผู้ใช้หมายถึงอะไรก็ตามที่ทริกเกอร์การเรียก PowerManager#userActivity
(โดยไม่มี USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
Flag) ซึ่งรวมถึงแต่ไม่จำกัดเพียง
- การโต้ตอบกับหน้าจอสัมผัส
- การกดปุ่มบนตัวเครื่อง
- เหตุการณ์อินพุตจากอุปกรณ์เสริมภายนอก (เช่น แป้นพิมพ์ที่เชื่อมต่อ รีโมตบลูทูธ รีโมต IR)
- การโต้ตอบด้วยเสียง
- การรับข้อความ HDMI CEC บางรายการ เช่น One Touch Play
- เริ่มเซสชันการแคสต์ใหม่
การปรับแต่ง
หากเปิดใช้ฟีเจอร์นี้ อุปกรณ์จะแสดงคำเตือนบนหน้าจอหลังจากไม่มีการใช้งานของผู้ใช้ตามระยะเวลาที่ระบุ หน้าจอจะดับลงหากไม่มีการดำเนินการใดๆ คุณสามารถปรับแต่งฟีเจอร์ได้โดยใช้ตัวเลือกการกำหนดค่า
กำหนดค่าการหมดเวลา
หากต้องการกำหนดค่าระยะหมดเวลา ให้อัปเดตองค์ประกอบต่อไปนี้ใน frameworks/base/core/res/res/values/config.xml
config_attentiveTimeout
- ระบุเวลาเริ่มต้นเป็นมิลลิวินาทีที่ผู้ใช้ไม่มีการใช้งานหลังจากที่หน้าจอปิดไป (แม้ว่าจะมี Wake Lock สำหรับหน้าจออยู่ก็ตาม)
- ตั้งค่าไว้เมื่อสร้าง
- หากค่าอยู่ระหว่าง
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
ให้ทำดังนี้ - ปิดใช้ฟีเจอร์ในการตั้งค่าโดย overriding
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
มีตัวอย่างวิธีแสดงฟีเจอร์นี้ในการตั้งค่า
ตัวอย่าง Test Case ที่ดำเนินการด้วยตนเอง
ตรวจสอบว่าการตั้งค่า
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 วินาที
- ตรวจสอบว่าหน้าจอปิดลงหลังจากหมดเวลาที่กำหนด