스크린샷 감지를 위한 보다 표준화된 환경을 만들기 위해 Android 14에서는 개인 정보 보호 스크린샷 감지 API를 도입했습니다. 이 API를 사용하면 앱에서 활동별로 콜백을 등록할 수 있습니다. 활동이 표시되는 동안 사용자가 스크린샷을 찍으면 이러한 콜백이 호출되고 사용자에게 알림이 전송됩니다.
지원되는 사용 사례
Android 14에서 시스템 API는 사용자가 하드웨어 버튼을 특정 조합으로 누르는 경우에만 스크린샷을 감지합니다. 이 API는 ADB 등 스크린샷과 관련된 테스트 명령어를 실행할 때 또는 기기의 현재 화면 콘텐츠를 캡처하는 계측 테스트 내에서 찍은 스크린샷을 감지하지 않습니다.
구현 단계
스크린샷 감지를 추가하려면 새 DETECT_SCREEN_CAPTURE
설치 시간 권한을 선언합니다.
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
그런 다음 사용자가 스크린샷을 캡처할 수 있는 앱의 각 활동에 다음 단계를 완료합니다.
onScreenCapture()
함수를 재정의하여 콜백을 구현합니다. 이 콜백에서는 앱이 다른 사용자에게 누군가 메시지 대화의 스크린샷을 촬영했음을 알리는 등의 조치를 취할 수 있습니다.Kotlin
val screenCaptureCallback = Activity.ScreenCaptureCallback { // Add logic to take action in your app. }
Java
final Activity.ScreenCaptureCallback screenCaptureCallback = new Activity.ScreenCaptureCallback() { @Override public void onScreenCaptured() { // Add logic to take action in your app. } };
활동의
onStart()
메서드에서 스크린샷 콜백을 등록합니다.Kotlin
override fun onStart() { super.onStart() // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(mainExecutor, screenCaptureCallback) }
자바
@Override protected void onStart() { super.onStart(); // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(executor, screenCaptureCallback); }
활동의
onStop()
메서드에서 스크린샷 콜백을 등록 취소합니다.Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
스크린샷 캡처 기능 제어
앱 활동의 콘텐츠가 스크린샷이나 비보안 디스플레이에 표시되지 않게 하려면 FLAG_SECURE
디스플레이 플래그를 설정하세요.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);