5

我有两个活动AB一个活动有视频列表。单击视频后,它会转到B(播放器)活动来播放视频。

面临的问题

A(视频列表)--> B(玩家活动)

  1. 当我单击后退按钮B活动进入 PIP 模式。现在A在 PIP 模式(视频播放)下可见且B活动。我再次单击后退按钮,它关闭了A活动,但B仍处于 PIP 模式。现在B活动将 PIP 模式保留为完全活动。

    现在再次单击后退按钮,我想将A显示为 PIP 模式的后退堆栈B活动。但是B活动进入 PIP 模式,但返回屏幕作为主屏幕。

  2. 当我在 B 活动中单击主页按钮时 B活动进入 PIP 模式。PIP 中的B活动现在可以访问主屏幕。现在单击PIP模式屏幕以完全活动。

    现在再次单击后退按钮,我想将A显示为 PIP 模式的后退堆栈B活动。但是B活动进入 PIP 模式,但返回屏幕作为主屏幕。

显现

<activity
   android:name=".MainActivity"
   android:screenOrientation="portrait"/>

<activity
   android:name=".PlayerActivity"
   android:allowTaskReparenting="true"
   android:autoRemoveFromRecents="true"
   android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|layoutDirection"
   android:excludeFromRecents="true"
   android:launchMode="singleTask"
   android:resizeableActivity="true"
   android:screenOrientation="sensor"
   android:supportsPictureInPicture="true" />

画中画代码

private void pictureInPictureMode() {

    if (supportsPiPMode() && getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {

        Rational aspectRatio = new Rational(playerView.getWidth(), playerView.getHeight());
        pictureInPictureParamsBuilder.setAspectRatio(aspectRatio).build();
        if (canEnterPiPMode()) enterPictureInPictureMode(pictureInPictureParamsBuilder.build());

    }

}

@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
    inPIP = isInPictureInPictureMode;
    if (isInPictureInPictureMode) {
        landscapeViews();
        bottomAdv.setVisibility(View.GONE);
    } else {
        portraitViews();
    }
}

@Override
protected void onUserLeaveHint() {
     pictureInPictureMode();
}

private boolean canEnterPiPMode() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
        return (AppOpsManager.MODE_ALLOWED == appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, Process.myUid(), getPackageName()));
    }

    return false;
 }

public boolean supportsPiPMode() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
}

B活动中,每当单击后退按钮时,都需要将 A活动作为返回堆栈B到 PIP 模式。指导我解决这个问题。

4

0 回答 0