Một số ứng dụng cần duy trì trạng thái bật màn hình, chẳng hạn như trò chơi hoặc ứng dụng xem phim. Một số API Android tự động duy trì trạng thái bật màn hình cho bạn. Trong các trường hợp khác, bạn có thể sử dụng đối tượng sửa đổi Compose hoặc đặt cờ để giữ cho màn hình luôn bật theo cách thủ công.
Luôn bật màn hình trong Compose
Nếu ứng dụng của bạn dùng Jetpack Compose, hãy áp dụng đối tượng sửa đổi keepScreenOn cho một thành phần kết hợp. Đối tượng sửa đổi này có trong Compose UI phiên bản 1.9.0 trở lên. Màn hình sẽ luôn bật miễn là đối tượng sửa đổi vẫn là một phần của thành phần kết hợp. Khi không có thành phần kết hợp nào sử dụng đối tượng sửa đổi, Compose sẽ tự động ngừng duy trì trạng thái bật màn hình.
Để chỉ bật màn hình trong một khoảng thời gian, hãy áp dụng đối tượng sửa đổi theo điều kiện. Ví dụ sau đây chỉ giữ cho màn hình luôn bật trong khi video phát:
@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. } }
Đối tượng sửa đổi này đặt thuộc tính thành phần hiển thị giống như thuộc tính android:keepScreenOn được mô tả trong phần tiếp theo, vì vậy, thuộc tính này chỉ giữ cho màn hình luôn bật khi cửa sổ của ứng dụng hiển thị. Phương thức này không xoá cờ FLAG_KEEP_SCREEN_ON mà ứng dụng của bạn đặt trên cửa sổ.
Giữ màn hình luôn bật theo cách thủ công
Để màn hình của thiết bị luôn bật, hãy đặt cờ FLAG_KEEP_SCREEN_ON trong hoạt động của bạn. Bạn chỉ có thể đặt cờ này trong một hoạt động, tuyệt đối không được đặt trong một dịch vụ hoặc thành phần ứng dụng khác. Ví dụ:
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Một cách khác để duy trì trạng thái bật màn hình là đặt thuộc tính android:keepScreenOn trong tệp XML bố cục của ứng dụng:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Việc sử dụng android:keepScreenOn="true" tương đương với việc sử dụng FLAG_KEEP_SCREEN_ON.
Bạn có thể sử dụng phương pháp phù hợp nhất cho ứng dụng của mình. Ưu điểm của việc đặt cờ theo phương thức lập trình trong hoạt động là bạn có thể xoá cờ theo phương thức lập trình sau đó, nhờ đó cho phép màn hình tắt.
Nếu một ứng dụng có cờ FLAG_KEEP_SCREEN_ON chuyển sang chế độ nền, thì hệ thống sẽ cho phép màn hình tắt bình thường. Bạn không cần phải xoá cờ một cách rõ ràng trong trường hợp này. Nếu ứng dụng của bạn không cần duy trì màn hình bật nữa, bạn nên xoá cờ bằng cách gọi clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).
Chế độ môi trường xung quanh cho TV
Trên thiết bị TV, hãy sử dụng FLAG_KEEP_SCREEN_ON để ngăn thiết bị chuyển sang Chế độ môi trường xung quanh trong khi phát video. Nếu hoạt động trên nền trước không đặt FLAG_KEEP_SCREEN_ON, thì thiết bị sẽ tự động chuyển sang Chế độ môi trường xung quanh sau một khoảng thời gian không hoạt động.