我们如何保持画中画模式?

Com*_*are 35 android android-8.0-oreo android-picture-in-picture

我们必须enterPictureInPictureMode()将活动从其当前形式转移到画中画表示.

除了破坏活动之外,我们还原的方法是什么,将活动恢复到正常状态?没有exitPictureInPictureMode(),leavePictureInPictureMode()janeGetMeOffThisCrazyPictureInPictureModeThing()方法Activity,文档似乎没有涵盖替代方案.

我对Android O的解决方案感兴趣,对于移动设备上的画中画模式,虽然如果它也适用于Android TV,太棒了!

更新2017-04-08:如果您想要的是当用户单击X按钮退出画中画模式时返回正常模式,您可以执行以下操作:

  @Override
  public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
    super.onPictureInPictureModeChanged(isInPictureInPictureMode);

    if (!isInPictureInPictureMode) {
      getApplication().startActivity(new Intent(this, getClass())
        .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
    }
  }
Run Code Online (Sandbox Code Playgroud)

关键位是调用startActivity()再次启动当前活动FLAG_ACTIVITY_REORDER_TO_FRONT.对于singleTask活动,您需要在某些非Activity上下文中调用它,例如Application单例.这似乎没有触发onStop()onStart(),但它确实触发onNewIntent()(无论Intent你传递给什么startActivity()).

Sae*_*umi 10

我有同样的问题:

  • MainActivity打开VideoPlayerActivity已启用 PIP 模式。
  • 按返回按钮进入 PIP 模式。
  • 再次按后退按钮,直到我退出MainActivity
  • X画中画窗口上的关闭 ( ) 按钮。
  • 打开应用程序,它将打开VideoPlayerActivity.

虽然上述解决方案都不适合我,但我发现收听X按钮的唯一方法是覆盖onStop.

当活动从 PIP 恢复onResume并被onPictureInPictureModeChanged调用时,当X按钮被点击时,onStoponPictureInPictureModeChanged被调用。

所以我试图finish()在alreay 调用onPictureInPictureModeChanged时调用内部onStop

override fun onStop() {
    super.onStop()
    onStopCalled = true
}

override fun onResume() {
    super.onResume()
    onStopCalled = false
}

override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) {
        if (isInPictureInPictureMode) {
            // ...
        } else {
            if (onStopCalled) {
                finish()
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


rds*_*rds 7

  1. 将活动移到后面

    activity.moveTaskToBack(false /* nonRoot */);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将活动恢复到前面

    Intent startIntent = new Intent(PipActivity.this, PipActivity.class);
    startIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    activity.startActivity(startIntent);
    
    Run Code Online (Sandbox Code Playgroud)


ugu*_*gur 0

官方文档称 PIP 窗口带有菜单,可让您切换到全屏。

PIP 窗口的尺寸为 240x135 dp,显示在系统选择的屏幕四个角之一的最顶层。用户可以调出PIP 菜单,让他们将 PIP 窗口切换为全屏,或者通过按住遥控器上的 Home 按钮关闭 PIP 窗口。如果主屏幕上开始播放另一个视频,PIP 窗口将自动关闭。

每当用户切换 PIP 模式时,您都可以覆盖 PIP 更改事件来处理 UI 元素。

链接到 onPictureInPictureModeChanged

@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
    if (isInPictureInPictureMode) {
        // Hide the controls in picture-in-picture mode.
        ...
    } else {
        // Restore the playback UI based on the playback status.
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)