안드로이드 8.0 Oreo 부터 지원되는 PIP(picture-in-picture) 기능을 사용해야 할 일이 생겨서 검색 조금 해본 결과 생각보다 쉽다는 것을 알게 되었다. 권한을 따로 요청할 필요도 없이 PIP가 필요한 activity에 옵션만 넣어주면 끝. 굳이 이 포스팅을 보지 않아도 안드로이드 개발자 사이트에 다 나와 있다.
https://developer.android.com/guide/topics/ui/picture-in-picture?hl=ko
▣ 코드 확인
AndroidManifest.xml
<activity android:name=".YourActivity"
android:supportsPictureInPicture="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
YourActivity.kt
// PictureInPictureParams builder 선언
var pipParamBuilder: PictureInPictureParams.Builder? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
pipParamBuilder = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
PictureInPictureParams.Builder()
} else {
null
}
val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
minimize()
}
}
// pip mode로 변경
private fun minimize(){
when {
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O -> {
// pip 창 사이즈
val aspectRational = Rational(100, 100)
pipParamBuilder?.let { ppBuilder ->
ppBuilder.setAspectRatio(aspectRational)?.build()
enterPictureInPictureMode(ppBuilder.build())
}
}
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N -> {
// deprecated
enterPictureInPictureMode()
}
else -> {
// 지원 불가
}
}
}
override fun onUserLeaveHint() {
super.onUserLeaveHint()
minimize()
}
override fun onPause() {
super.onPause()
minimize()
}
// pip <--> 앱 전환시
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration?) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
when(isInPictureInPictureMode) {
true -> {
Log.d("log", "pip 모드")
}
else -> {
Log.d("log", "앱 활성 모드")
}
}
}
'프로그래밍 > android' 카테고리의 다른 글
[kotlin] android spinner setOnItemSelectedListener (0) | 2021.06.14 |
---|---|
[android] DialogFragment keyEvent (키 이벤트 수신) (0) | 2021.06.04 |
AlertDialog.Builder change background color (0) | 2021.04.08 |
keystore 정보 확인하기 (MD5, SHA1, SHA256) (0) | 2021.03.24 |
안드로이드 해시키 생성 (feat. 터미널) (0) | 2021.03.24 |