บางแอปจำเป็นต้องเปิดหน้าจอไว้ตลอด เช่น แอปเกมหรือแอปภาพยนตร์ Android API บางรายการจะเปิดหน้าจอไว้ให้คุณโดยอัตโนมัติ ในกรณีอื่นๆ คุณสามารถใช้ตัวแก้ไข Compose หรือตั้งค่าแฟล็กเพื่อเปิดหน้าจอไว้ด้วยตนเอง
เปิดหน้าจอไว้ใน Compose
หากแอปใช้ Jetpack Compose ให้ใช้ตัวแก้ไข keepScreenOn กับ Composable ตัวแก้ไขนี้พร้อมใช้งานใน Compose UI 1.9.0 ขึ้นไป หน้าจอจะเปิดอยู่ตราบใดที่ตัวแก้ไขยังเป็นส่วนหนึ่งขององค์ประกอบ เมื่อไม่มี Composable ใดใช้ตัวแก้ไข Compose จะหยุดเปิดหน้าจอไว้โดยอัตโนมัติ
หากต้องการเปิดหน้าจอไว้เป็นบางครั้ง ให้ใช้ตัวแก้ไขแบบมีเงื่อนไข ตัวอย่างต่อไปนี้จะเปิดหน้าจอไว้เฉพาะขณะที่วิดีโอเล่นเท่านั้น
@Composable fun VideoPlayer(isPlaying: Boolean, modifier: Modifier = Modifier) { Box( modifier = modifier // Keep the screen on only while the video plays. .then(if (isPlaying) Modifier.keepScreenOn() else Modifier) ) { // Video surface and playback controls. } }
ตัวแก้ไขจะตั้งค่าพร็อพเพอร์ตี้มุมมองเดียวกับแอตทริบิวต์ android:keepScreenOn ที่อธิบายไว้ในส่วนถัดไป ดังนั้นจึงทำให้หน้าจอเปิดอยู่เฉพาะขณะที่หน้าต่างของแอปปรากฏอยู่เท่านั้น แต่จะไม่ล้างแฟล็ก FLAG_KEEP_SCREEN_ON ที่แอปตั้งค่าไว้ในหน้าต่าง
เปิดหน้าจอไว้ด้วยตนเอง
หากต้องการเปิดหน้าจอของอุปกรณ์ไว้ ให้ตั้งค่าแฟล็ก FLAG_KEEP_SCREEN_ON ในกิจกรรม คุณตั้งค่า Flag นี้ได้เฉพาะในกิจกรรมเท่านั้น ไม่สามารถตั้งค่าในบริการหรือคอมโพเนนต์อื่นๆ ของแอปได้ เช่น
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
อีกวิธีหนึ่งในการเปิดหน้าจอไว้คือการตั้งค่าแอตทริบิวต์ android:keepScreenOn ในไฟล์ XML ของเลย์เอาต์ของแอปพลิเคชัน
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
การใช้ android:keepScreenOn="true" เทียบเท่ากับการใช้ FLAG_KEEP_SCREEN_ON
คุณสามารถใช้วิธีการใดก็ได้ที่เหมาะกับแอปของคุณ ข้อดีของการตั้งค่าแฟล็กแบบเป็นโปรแกรมในกิจกรรมคือช่วยให้คุณมีตัวเลือกในการล้างแฟล็กแบบเป็นโปรแกรมในภายหลัง ซึ่งจะช่วยให้หน้าจอปิดได้
หากแอปที่มีแฟล็ก FLAG_KEEP_SCREEN_ON ทำงานอยู่เบื้องหลัง ระบบจะอนุญาตให้หน้าจอปิดตามปกติ คุณไม่จำเป็นต้องล้างแฟล็กอย่างชัดแจ้งในกรณีนี้ หากแอปไม่จำเป็นต้องเปิดหน้าจอไว้อีกต่อไป คุณควรล้าง Flag โดยเรียกใช้ clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
โหมดแอมเบียนท์สำหรับทีวี
ในอุปกรณ์ทีวี ให้ใช้ FLAG_KEEP_SCREEN_ON เพื่อป้องกันไม่ให้อุปกรณ์เข้าสู่โหมดแอมเบียนท์ระหว่างการเล่นวิดีโอ หากกิจกรรมที่ทำงานอยู่เบื้องหน้าไม่ได้ตั้งค่า FLAG_KEEP_SCREEN_ON อุปกรณ์จะเข้าสู่โหมดแอมเบียนท์โดยอัตโนมัติหลังจากไม่มีการใช้งานเป็นระยะเวลาหนึ่ง