สแตนด์บายทีวี

ใน Android 11 นอนหลับไม่ตั้งใจเป็นคุณลักษณะการประหยัดพลังงานที่ช่วยให้ผู้ใช้ไม่มีการใช้งานหมดเวลาที่จะตั้งหลังจากที่ปิดหน้าจอแม้ว่าหน้าต่าง FLAG_KEEP_SCREEN_ON จะมองเห็นหรือ wakelocks ระดับ FULL_WAKE_LOCK , SCREEN_BRIGHT_WAKE_LOCK หรือ SCREEN_DIM_WAKE_LOCK ที่จะมีขึ้น Wakelocks มีระดับ 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 (30s)

กำลังแสดงการตั้งค่าการหมดเวลาในการตั้งค่าทีวี

ในการแสดงการตั้งค่าการหมดเวลาปรับปรุงองค์ประกอบต่อไปนี้ใน 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

การกำหนดค่าเวลาในการสร้างและทรัพยากรสามารถเปลี่ยนแปลงได้โดยการซ้อนทับทรัพยากร

การดำเนินการ

เปิดใช้งานคุณสมบัติโดยใช้สิ่งต่อไปนี้

  1. แทนที่ค่าเริ่มต้น config_attentiveTimeout
  2. ถ้าใช้ 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 ให้ตัวอย่างของวิธีการที่จะเปิดเผยคุณสมบัติในการตั้งค่าที่

ตัวอย่างกรณีทดสอบด้วยตนเอง

  1. ตรวจสอบให้แน่ใจ stay_on_while_plugged_in ตั้งค่านักพัฒนาจะออกถ้ารายงาน HAL สุขภาพของอุปกรณ์ว่าอุปกรณ์ที่มีแบตเตอรี่ ( battery_present เป็น true ) เช่นนี้อาจป้องกันไม่ให้คุณลักษณะจากการปิดหน้าจอ
    adb shell settings put global stay_on_while_plugged_in 0

  2. ตั้งค่าการหมดเวลาพักเครื่องโดยไม่ตั้งใจให้นานกว่าระยะเวลากล่องโต้ตอบคำเตือนสองสามวินาที
    adb shell settings put secure attentive_timeout 32000
  3. เริ่มเล่นวิดีโอ (เพื่อรับหน้าจอล็อก)
  4. ตรวจสอบว่ากล่องโต้ตอบคำเตือนการนอนหลับปรากฏขึ้นหลังจากผ่านไปสองสามวินาที
  5. ตรวจสอบว่าหน้าจอดับลงหลังจากหมดเวลาที่ตั้งไว้