예전에 안드로이드 버전이 올라가게 되면 유튜브 프리미엄이 아니더라도 유사한 기능으로
영상을 볼 수 있다는 내용의 포스팅을 봤던 기억이 있긴 하다. 하지만 얼마 못가고 바로 잊어버렸다
최근에 권한 관련으로 안드로이드 개발자 문서를 살펴보다가 PIP 모드를 보게 되었다.
그때까지도 사실 나는 유튜브 프리미엄을 사용하고 있다. 그래서 "창모드로 영상 시청 구현한 거 진짜 잘 만들었다..",
"어떻게 만들었지?" 라는 이런저런 생각을 하며 자기 계발 목적으로 비슷하게 구현해보았는데 오로지 "다른 화면 위에 그리기" 라는 권한만 이용하였었다.
유튜브 앱의 권한을 보니 "다른 화면 위에 그리기" 와 "PIP 모드" 권한이 포함되어 있었다.
이유는 간단하였다.
[안드로이드 개발자 문서의 설명 내용]
Android 8.0(API 레벨 26)에서는 활동을 PIP 모드로 실행할 수 있습니다. PIP는 주로 동영상 재생에 사용되는 특수한 유형의 멀티 윈도우 모드입니다. 사용자가 기본 화면에서 앱을 탐색하거나 콘텐츠를 탐색할 때 화면 모서리에 고정된 작은 창에서 동영상을 볼 수 있습니다.
즉 안드로이드 SDK 26버전 이상 부터는 PIP 기능을 이용할 수 있으며, 그 이하 버전은 "다른 화면 위에 그리기" 권한을 이용해서 직접 뷰를 만들어야 한다.
그럼 그게 끝인가?
물론 아니다.
"다른 화면 위에 그리기" 와 "PIP 모드" 권한은 이용 방법에 현저한 차이가 있다.
CLASS | VIEW 구성 | VIEW 제거 | |
다른 화면 위에 그리기 | ACTIVITY or SERVICE | WindowManager | 직접 구현 |
PIP 모드 | ACTIVITY | ACTIVITY | 기능 내장 + 직접 구현 |
안드로이드 개발자 페이지에 의하면 구축 방법은 다음과 같다.
1. PIP 모드를 사용하려는 엑티비티의 매니페스트 정보에 가운데 3줄 코드를 추가한다.
<activity android:name=".MediaSessionPlaybackActivity"
android:resizeableActivity="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:supportsPictureInPicture="true"
/>
2. 1번의 3줄을 추가한 엑티비티 클래스에 PIP 모드 기능을 추가한다.
fun minimize() {
// Hide the controls in picture-in-picture mode.
mMovieView.hideControls()
// Calculate the aspect ratio of the PiP screen.
val aspectRatio = Rational(mMovieView.width, mMovieView.height)
mPictureInPictureParamsBuilder.setAspectRatio(aspectRatio).build()
//
enterPictureInPictureMode(mPictureInPictureParamsBuilder.build())
}
필요에 따라서 홈버튼을 눌렀을 때나 현재 엑티비티를 종료하지 않은 상태에서도 PIP 모드를 실행할 수 있다.
홈버튼 이벤트 발생 시
override fun onUserLeaveHint() {
if (iWantToBeInPipModeNow()) {
enterPictureInPictureMode()
}
}
엑티비티 중단 시
override fun onPause() {
super.onPause()
minimize()
}
해당 코드로 생성한 앱은 아래 첨부 파일로 확인 가능합니다!
만약 APK보다는 전체 소스코드가 필요하시다면 아래 링크로 접속하여 확인하시면 되겠습니다.
참고 자료 : https://developer.android.com/guide/topics/ui/picture-in-picture?hl=ko
안드로이드(ANDROID) - 리사이클러뷰(RecyclerView)를 통한 ListView 사용 방법(2) (0) | 2020.03.31 |
---|---|
안드로이드(ANDROID) - 리사이클러뷰(RecyclerView)를 통한 ListView 사용 방법(1) (0) | 2020.03.30 |
안드로이드(ANDROID) - 동적 버튼 생성하기 (0) | 2020.03.26 |
안드로이드(ANDROID) - 버튼(Button) 클릭 이벤트 (0) | 2020.03.26 |
안드로이드(ANDROID) - 최근 실행 이력 삭제 감지 이벤트 (0) | 2020.03.25 |