[Kotlin/Android] PIP 모드

Programming/Android 2021. 9. 7. 11:58 Posted by 생각하는로뎅
반응형

PIP MODE

 

 

  유튜브 또는 넷플릭스 동영상 재생 중에 홈 화면으로 나오면, 모서리에 축소되는 화면을 PIP 모드라고 한다.

 

 

 

1. API LEVEL

 

  Android 8.0(API 수준 26)에서는 활동을 PIP 모드로 실행이 가능하다.

 

 

 

2. 주의사항

 

  RAM이 부족한 기기에서는 PIP가 사용 중지될 수도 있다.

 

 

3. 구현 소스

 

  1) build.gradle (app)

 

...

android {
   
   ...

    buildFeatures {
        viewBinding = true
        dataBinding = true
    }

    defaultConfig {
    
        ...
        // Android 8.0(API 수준 26)에서는 활동을 PIP 모드로 실행할 수 있습니다.
        minSdk 26   
        ...
        
    }

    ...
    
}

 

 

 

  2) layout/activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<layout>

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Button
            android:id="@+id/btn_pip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="PIP MODE 전환"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"></Button>

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

 

activity_main.xml

 

  3) manifests/AndroidManifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
...

        <!-- PIP 지원 설정 : android:supportsPictureInPicture="true" -->
        <activity
            android:supportsPictureInPicture="true"
            ...
            >
            ...
        </activity>
        
...

</manifest>

 

  4) MainActivity.kt

 

import android.app.PictureInPictureParams
import android.content.pm.PackageManager
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.pipmode.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        this.binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)

        this.binding.btnPip.setOnClickListener {

            // PIP를 사용할 수 있는지 확인 (RAM이 부족한 기기에서는 PIP가 사용 중지될 수도 있음)
            if (packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {

                var param = PictureInPictureParams.Builder().build()

                // pip mode 진입
                enterPictureInPictureMode(param)

            }

        }
    }

    /**
    * PIP MODE 전환시 Callback
    * @author 임성진
    * @version 1.0.0
    * @since 2021-09-07 오전 11:54
    **/
    override fun onPictureInPictureModeChanged(
        isInPictureInPictureMode: Boolean,
        newConfig: Configuration?
    ) {
        super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)

        if (isInPictureInPictureMode) {
            // PIP 모드에서 전체 화면 UI(컨트롤 등)를 숨깁니다.
        } else {
            // 전체 화면 UI를 복원합니다.
        }

    }
}

 

 

반응형