안드로이드 자바

[Java][Android] FLAG_SECURE 플래그로 스크린샷/화면 녹화 방지

teamnova 2025. 4. 27. 17:00
728x90

안녕하세요, 

 

오늘은 FLAG_SECURE 플래그를 사용해서 간단하게 스크린샷/화면 녹화 방지를 해보도록 하겠습니다. 

WindowManager.LayoutParams.FLAG_SECURE 플래그는 앱 화면이 스크린샷, 화면 녹화, 미러링 등에 노출되지 않도록 막아줍니다.

 

 

아래 예제는 안드로이드 스튜디오 에뮬레이터에서 적용되지 않으며,

기기에서 테스트해야 확인할 수 있습니다. 

 

 

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private boolean isSecureEnabled = false;
    private Button toggleSecureButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toggleSecureButton = findViewById(R.id.toggleSecureButton);

        toggleSecureButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toggleSecureMode();
            }
        });
    }

    private void toggleSecureMode() {
        if (isSecureEnabled) {
            // 캡처 방지 해제
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
            isSecureEnabled = false;
            Toast.makeText(this, "캡처 방지 해제됨", Toast.LENGTH_SHORT).show();
            toggleSecureButton.setText("캡처 방지 켜기");
        } else {
            // 캡처 방지 활성화
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                    WindowManager.LayoutParams.FLAG_SECURE);
            isSecureEnabled = true;
            Toast.makeText(this, "캡처 방지 활성화됨", Toast.LENGTH_SHORT).show();
            toggleSecureButton.setText("캡처 방지 끄기");
        }
    }


}

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="24dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="캡처 방지 테스트 화면"
        android:textSize="18sp"
        android:layout_marginBottom="24dp" />

    <Button
        android:id="@+id/toggleSecureButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="캡처 방지 켜기" />
</LinearLayout>

 

 

아래 영상에서 볼 수 있듯이, 캡쳐 방지를 활성화 시키면 화면녹화가 방지되어 검은 화면으로 출력됩니다. 

 

 

시연 영상 입니다.