본문 바로가기

Android/공부

안드로이드 스크린샷 감지

1. 개요

커스텀 갤러리를 만드는 경우, 스크린샷이 발생하면 해당 사진 또한 실시간으로 갤러리에 추가해야 할 수 있습니다. 저도 그렇게 구현했구요.

또는 스크린샷이 발생했을 때 특정 동작을 하도록 앱을 구현하고 싶은 경우도 있습니다.

지금부터 스크린샷을 감지하는 방법에 대해 순서대로 설명드리겠습니다.

2. 스크린샷 이벤트 감지

우선 전체 코드는 다음과 같습니다.

val handler = Handler(Looper.getMainLooper())
        contentObserver = object : ContentObserver(handler) {
            override fun onChange(selfChange: Boolean, uri: Uri?) {
                val regex =
                    Regex(MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString() + "/[0-9]+")
                if (uri.toString().matches(regex)) {
                	// 스크린샷 발생했을 때 이벤트
                }
                super.onChange(selfChange, uri)
            }
        }
        contentResolver.registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, contentObserver)
    }

먼저 contentObserver 를 사용합니다.

이는 uri를 관찰(Observe)하고 있으며, 이것에 변화가 생길 경우 이를 감지해 특정 동작을 취할 수 있도록 해줍니다.

이때 관찰하는 uri를 아래처럼 설정합니다.

MediaStore.Images.Media.EXTERNAL_CONTENT_URI

즉, 이 방법은 스크린샷 자체라기보다는 스크린샷 이후 해당 파일이 저장소에 저장되었을 때 일어나는 변화를 감지하는 것입니다. 만약 변화가 발생했다면 스크린샷이 발생한 것이고, 이 경우 원하는 동작을 수행하도록 하면 됩니다.

마지막으로 ContentResolver에 ContentObserver를 등록하면 됩니다.

3. 마무리

스크린샷을 감지하는 것은 상황에 따라 중요한 기능일 수 있기 때문에, 이번 시간에 잘 정리되었으면 좋겠습니다.

728x90
반응형