API 26부터 지원된 기능으로 액티비티를 pip 모드로 실행할 수 있다.
해당 기능을 사용하기 위해서는 manifest 파일의 액티비티 부분에 android:supportPictureIPicture 속성을 true로 주면 사용할 수 있다.
주요 사용법 및 특징은 다음과 같다
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean,
newConfig: Configuration) {
if (isInPictureInPictureMode) {
// Hide the full-screen UI (controls, etc.) while in picture-in-picture mode.
} else {
// Restore the full-screen UI.
}
}
pip 전환시 라이프사이클 콜백
태스크 관련 동작.
크게 2가지 방법이 있다
@Override
public void finish () {
if( mBackstackLost ){
finishAndRemoveTask();
startActivity(
Intent.makeRestartActivityTask(
new ComponentName(this, MockHomeActivity.class)));
} else {
super.finish();
}
}
/**
* Bring up launcher task to front
*/
public static void navToLauncherTask(Context appContext) {
ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
// iterate app tasks available and navigate to launcher task (browse task)
assert activityManager != null;
final List<ActivityManager.AppTask> appTasks = activityManager.getAppTasks();
for (ActivityManager.AppTask task : appTasks) {
final Intent baseIntent = task.getTaskInfo().baseIntent;
final Set<String> categories = baseIntent.getCategories();
if (categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) {
task.moveToFront();
return;
}
}
}
사실 2번이 제일 깔끔하게 처리할 수 있는 것으로 보인다.
https://medium.com/androiddevelopers/navigation-patterns-with-pip-2c5b6a446ba0
https://developer.android.com/guide/topics/ui/picture-in-picture?hl=ko