เปิดหน้าจอไว้

บางแอปจำเป็นต้องเปิดหน้าจอไว้ตลอด เช่น แอปเกมหรือแอปภาพยนตร์ 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 อุปกรณ์จะเข้าสู่โหมดแอมเบียนท์โดยอัตโนมัติหลังจากไม่มีการใช้งานเป็นระยะเวลาหนึ่ง

ดูเพิ่มเติม