제가 만든 동영상 플레이어 앱을 사용자가 보고 있는데, 1분도 안 돼서 화면이 어두워지거나 꺼져버린다면 정말 불편하겠죠? 또, 레시피 앱을 보며 요리를 따라 하거나, 내비게이션 앱의 안내를 받으며 운전하는 중에도 화면이 자동으로 꺼진다면 사용자 경험은 매우 나빠질 것입니다.
이처럼 사용자가 앱을 사용하는 동안 지속적으로 화면을 봐야 하는 경우가 있습니다. 오늘은 이런 앱들을 위한 필수 기능, 바로 안드로이드 앱 화면을 항상 밝게 유지하는(화면 꺼짐을 방지하는) 가장 간단하고 확실한 방법에 대해 알아보겠습니다.
FLAG_KEEP_SCREEN_ON
플래그 사용하기
안드로이드에서 특정 화면(Activity)이 보이는 동안 화면이 꺼지지 않도록 하는 가장 일반적인 방법은 WindowManager.LayoutParams
의 FLAG_KEEP_SCREEN_ON
플래그를 사용하는 것입니다.
이 방법은 현재 액티비티의 윈도우(Window)에 “내가 보이는 동안에는 화면을 계속 켜줘!”라는 속성을 부여하는 방식입니다. 코드는 매우 간단합니다.
Kotlin 코드 예시
import android.os.Bundle
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 화면 켜짐 유지 플래그 추가
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
override fun onDestroy() {
super.onDestroy()
// 액티비티가 소멸될 때 화면 켜짐 유지 플래그 제거 (배터리 소모 방지)
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}
Java 코드 예시
import android.os.Bundle;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 화면 켜짐 유지 플래그 추가
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 액티비티가 소멸될 때 화면 켜짐 유지 플래그 제거 (배터리 소모 방지)
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
코드 상세 분석 및 생명주기 관리
- window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)이 코드가 바로 핵심입니다. onCreate() 메소드에서 이 코드를 호출하면, 해당 액티비티가 생성되는 시점부터 화면 꺼짐 방지 기능이 활성화됩니다.
- window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)이 부분은 책임감 있는 개발을 위해 매우 중요합니다. 화면을 계속 켜두는 것은 배터리를 소모하는 기능이므로, 더 이상 필요 없을 때는 반드시 이 설정을 해제해 주어야 합니다. onDestroy()는 액티비티가 완전히 소멸되는 시점이므로, 이때 플래그를 제거하여 불필요한 배터리 소모를 막는 것이 좋습니다. [심화 팁]만약 액티비티가 화면에 보일 때만(포그라운드 상태) 화면을 켜고, 다른 앱으로 전환되는 등 백그라운드로 갈 때는 화면 꺼짐 방지를 해제하고 싶다면, onResume()에서 addFlags를, onPause()에서 clearFlags를 호출하는 것이 더 배터리 효율적인 방법이 될 수 있습니다.
XML 레이아웃으로 설정하는 방법 (대안)
코드를 통해 동적으로 제어하는 대신, 특정 레이아웃 전체에 화면 켜짐 유지 속성을 부여하고 싶다면 XML 파일에 직접 설정하는 더 간단한 방법도 있습니다.
activity_main.xml
과 같은 레이아웃 파일의 최상위 뷰에 android:keepScreenOn="true"
속성을 추가하면 됩니다.
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
</androidx.constraintlayout.widget.ConstraintLayout>
이 방법은 코드가 필요 없어 매우 간편하지만, 코드처럼 동적으로 기능을 켜고 끄는 제어가 어렵다는 단점이 있습니다. 화면을 항상 켜둬야 하는 것이 명확한 경우에 사용하기 좋습니다.
사용 시 반드시 고려해야 할 주의사항
이 기능은 사용자 편의성을 크게 높여주지만, 남용하면 오히려 좋지 않은 경험을 줄 수 있습니다. 아래 사항들을 반드시 고려해 주세요.
- 배터리 소모: 화면은 스마트폰에서 배터리를 가장 많이 소모하는 부품 중 하나입니다. 이 기능은 배터리 소모를 크게 증가시키므로, 앱의 핵심 기능상 꼭 필요한 경우에만 제한적으로 사용해야 합니다.
- 사용자 설정 존중: 모든 사용자가 이 기능을 선호하는 것은 아닙니다. 가능하다면 앱 설정 화면에 ‘화면 항상 켜기’ 옵션을 제공하여 사용자가 직접 기능을 켜고 끌 수 있도록 선택권을 주는 것이 가장 좋은 사용자 경험을 제공합니다.
- 다른 기능과 충돌 여부 확인: 기기 자체의 ‘절전 모드’나 다른 앱과의 충돌 가능성도 있습니다. 여러 환경에서 충분히 테스트하여 문제가 발생하지 않는지 확인하는 것이 좋습니다.
마치며
FLAG_KEEP_SCREEN_ON
플래그는 사용자의 앱 사용 흐름이 끊기지 않도록 돕는 간단하면서도 강력한 도구입니다.
오늘 배운 내용을 바탕으로, “필요할 때 적절히 사용하고, 필요가 끝나면 반드시 해제한다”는 원칙을 기억하며 여러분의 앱에 적용해 보세요. 이러한 작은 디테일이 사용자의 만족도를 크게 높여줄 것입니다.
읽어주셔서 감사합니다. 🙂
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."