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
반응형
'Android > 공부' 카테고리의 다른 글
커스텀 보틈시트(BottomSheet) 만들기 (0) | 2021.12.04 |
---|---|
커스텀 스낵바, 커스텀 토스트 만들기 (0) | 2021.12.03 |
에디트텍스트(EditText) 관련 짜투리 지식 1 (실시간으로 쉼표 표시하기, 커서 커스텀, 동그란 커서 색상 변경) (0) | 2021.12.01 |
오픈소스 라이센스 명시 (0) | 2021.11.26 |
ExpandableListView - 확장 가능한 리스트뷰 (0) | 2021.11.25 |