在 Android 的画中画模式下检测关闭并最大化点击事件



如何检测用户是否单击了PIP小窗口中的本机关闭和最大化按钮。有没有我可以听的听众。现在我的接收器只听我在布局中定义的控件,但是非自定义按钮(如 [] max 按钮和 X 关闭按钮)是 PIP 的一部分呢?查看链接链接

无法检测到任何默认画中画按钮的点击。

当您的活动进入PiP模式时,实际上另一个系统活动(称为PiPMenuActivity)将启动。在它的内部,它在这些画中画按钮中设置了一些OnClickListeners。当它们被单击时,不会将广播、意图或类似的东西分派到系统,因此您可以收听它,PiP API 也没有提供将侦听器附加到这些按钮的方法。

现在检测的唯一方法是使用活动的 onResume 和 onStop 方法。当活动从画中恢复时,将在您的活动上调用恢复和onPictureInPictureModeChanged回调。单击关闭按钮时,将调用 onStop 和 onPictureInPictureModeChanged 回调。

这是更新的解决方案,为我关闭和最大化事件工作。

@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
    if(newConfig !=null){
        videoPosition = playerManager.getCurrentPosition();
        isInPipMode = !isInPictureInPictureMode;
    }
    if (getLifecycle().getCurrentState() == Lifecycle.State.CREATED) {
        finishAndRemoveTask();
        //when user click on Close button of PIP this will trigger, do what you want here
    }
    else if (getLifecycle().getCurrentState() == Lifecycle.State.STARTED){
        //when PIP maximize this will trigger
    }
    super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
}

@Artenes Nogueira你是对的,不可能检测默认PiP按钮上的点击事件,但有一种方法可以知道发生了什么。应重写 onPictureInPictureModeChanged 方法并检查活动的生命周期。

在这里,您可以找到一个不言自明的代码示例:

override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration?) {
    if (lifecycle.currentState == Lifecycle.State.CREATED) {
        //user clicked on close button of PiP window
        finishAndRemoveTask()
    }
    else if (lifecycle.currentState == Lifecycle.State.STARTED){
        if (isInPictureInPictureMode) {
            // user clicked on minimize button
        } else {
            // user clicked on maximize button of PiP window
        }
    }
    super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
}
override fun onPictureInPictureModeChanged(
    isInPictureInPictureMode: Boolean,
    newConfig: Configuration?
) {
    if (isInPictureInPictureMode) {
    } else {
       if (lifecycle.currentState == Lifecycle.State.STARTED) {
           // todo finish your app
       }
    }
}

我没有其他方法寻找它,我可以通过这种方式解决它。

我需要检测用户何时单击pip窗口的关闭按钮。我最终收听了JitsiMeetActivity的onDestroy函数。

最新更新