ใน 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
) ซึ่งรวมถึงแต่ไม่จํากัดเพียง
- การโต้ตอบกับหน้าจอสัมผัส
- การกดปุ่มบนตัวเครื่อง
- เหตุการณ์อินพุตจากอุปกรณ์เสริมภายนอก (เช่น แป้นพิมพ์ที่เชื่อมต่อ รีโมตบลูทูธ รีโมต 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
เริ่มต้น - หากใช้
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
- เริ่มเล่นวิดีโอ (เพื่อรับ WakeLock ของหน้าจอ)
- ตรวจสอบว่ากล่องโต้ตอบคำเตือนเรื่องการนอนหลับปรากฏขึ้นหลังจากผ่านไป 2-3 วินาที
- ตรวจสอบว่าหน้าจอปิดหลังจากระยะหมดเวลาที่ตั้งค่าไว้สิ้นสุดลง