MediaProjection은 안드로이드 화면 캡처 및 녹화 기능을 지원해 주는 API입니다.
MediaProjection을 사용하기 위해서는 위와 같이 사용자 승인을 받아야 하고,
앱이 권한을 부여받았을 때 캡처 및 녹화 기능을 사용할 수 있습니다.
Android 14 이전까지 해당 권한을 승인받았을 때의 Intent를 재활용하여 사용할 수 있었습니다.
즉, 앱 실행하고 최초 권한 승인을 한번 받으면 이후 권한 승인 없이 진행이 가능했습니다.
해당 동작이 보안상 문제였는지 Android 14 이후로는 권한 승인했을 때 Intent 재활용이 불가능하였고
이제 캡처 및 녹화기능을 동작할 때마다 반드시 해당 권한 승인을 받아야 합니다.
결론적으로 앱에서는 해당 권한 승인을 넘길 수 있는 방법은 찾을 수 없었지만
ADB Shell Command로 해당 권한을 허용할 수 있는 방법을 찾게 되어 정리해보려고 합니다.
ADB 준비
1. ADB 설치 및 설정
PC에 ADB를 사용할 수 있도록 준비가 되어야 합니다. 자세한 내용은 아래 글을 참조해 주시면 좋을 것 같습니다.
2024.04.26 - [개발/Android] - 안드로이드 스튜디오 ADB 설치 및 터미널 사용
2. USB 디버깅 활성화
아래 순서대로 단말 USB 디버깅을 활성화합니다.
- 개발자 모드 활성화 : [설정] > [휴대전화 정보] > [소프트웨어 정보] > [빌드번호] 7회 클릭
- USB 디버깅 활성화 : [설정] > [개발자 옵션] > [USB 디버깅] 활성화
3. USB 디버깅 허용
PC와 단말과 연결한다면 아래와 같이 USB 디버깅 허용 팝업창이 출력되면 허용합니다.
MediaProjection 권한 관련 명령어
현재 PROJECT_MEDIA 권한 설정 가져오기
$adb shell appops get [페키지명] PROJECT_MEDIA
PROJECT_MEDIA 권한 허용
$adb shell appops set [페키지명] PROJECT_MEDIA allow
PROJECT_MEDIA 권한 해제
$adb shell appops set [페키지명] PROJECT_MEDIA ignore
MediaProjection 권한 허용 테스트 결과
테스트 앱(페키지명 : com.example.mediaprojectionex)에 권한 허용해서 테스트해 봤습니다.
권한을 허용한 상태에서 MediaProjection 캡처 및 녹화 동작 시 권한 팝업 창 없이 사용이 가능했습니다.
또한 앱을 종료했다가 실행해도 해당 설정 값은 유지되는 것을 확인하였습니다.
참고자료
https://screenshottouch.wordpress.com/2023/12/13/screen-capture-permanent-permission/
'안드로이드 > 코틀린' 카테고리의 다른 글
안드로이드 캡처 효과 예제 : CaptureEffectView (0) | 2024.05.02 |
---|---|
코틀린 화면 캡처 Canvas, PixelCopy 비교 (0) | 2024.04.30 |
안드로이드 이미지 확대 축소 : PhotoView 예제 (0) | 2024.04.25 |
안드로이드 Room 쿼리(Query) 정리 (0) | 2023.02.21 |
안드로이드 Room in jetpack 이해와 사용방법 (0) | 2023.02.17 |
댓글