Giới thiệu
Bài viết minh họa cách giữ màn hình luôn sáng (không tắt screen, không sleep) khi ứng dụng chạy, dùng WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.
Các bước thực hiện
Bước 1: Tạo dự án mới
Khởi tạo project Android Studio.
Bước 2: Giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="MainActivity">
<TextView
android:text="Màn hình luôn sáng!"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/textView"
android:gravity="center"
android:textSize="25dp"
android:textStyle="bold"
android:textColor="#FF9800"/>
</RelativeLayout>
Bước 3: Bật flag KEEP_SCREEN_ON (src/MainActivity.java)
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Giữ màn hình sáng - không tắt, không dim, không sleep
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
Bước 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Màn hình sẽ không bao giờ tắt/sleep khi Activity này đang foreground.

Các cách khác để giữ màn hình sáng
1. Trong XML Layout (đơn giản nhất)
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
<!-- Toàn bộ Activity giữ màn hình sáng -->
</LinearLayout>
2. Trong AndroidManifest.xml (cho toàn Activity)
<activity
android:name=".MainActivity"
android:keepScreenOn="true">
</activity>
3. Tắt flag khi không cần nữa
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
So sánh các phương pháp
| Phương pháp | Phạm vi | Điểm mạnh | Điểm yếu |
|---|---|---|---|
| FLAG_KEEP_SCREEN_ON (Java) | Activity/Window | Kiểm soát động (bật/tắt runtime) | Cần code |
| android:keepScreenOn (XML View) | View + children | Đơn giản, declarative | Chỉ khi View attach |
| android:keepScreenOn (Manifest) | Toàn Activity | Không cần code Java | Không tắt động được |
| WakeLock (PowerManager) | Toàn hệ thống/Process | Mạnh nhất, giữ CPU chạy | Cần permission WAKE_LOCK, dễ drain pin, phức tạp |
⚠️ Lưu ý quan trọng
- FLAG_KEEP_SCREEN_ON chỉ giữ màn hình sáng, KHÔNG giữ CPU chạy (khác với WakeLock)
- Hệ thống tự động clear flag khi Activity pause/stop → an toàn, không leak
- Không cần permission đặc biệt (khác với WakeLock cần
WAKE_LOCK) - Chỉ dùng khi thực sự cần: navigation, đọc sách, video call, game, nấu ăn
- Luôn test: xoay màn hình, nhấn Home, nhận call → flag tự clear khi pause
- Từ API 27+:
setShowWhenLocked(),setTurnScreenOn()cho lock screen
WakeLock (Nâng cao - ít dùng)
// Cần:PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "MyApp::WakeLock"); // Bật wakeLock.acquire(); // Tắt (BẮT BUỘC trong onPause/onDestroy) wakeLock.release();
Khuyên dùng FLAG_KEEP_SCREEN_ON thay vì WakeLock trừ khi cần giữ CPU chạy background.