如何检测用户是否点击了PIP小窗口中的原生关闭和最大化按钮。有没有听众我可以听听。现在,我的接收器仅侦听我在布局中定义的控件,但是非自定义按钮(例如 [] max 按钮和 X 关闭按钮是 PIP 的一部分)又如何呢?请参阅链接 链接
无法检测对任何默认画中画按钮的点击。
当您的 Activity 进入 PiP 模式时,实际上会启动另一个系统 Activity,称为 PiPMenuActivity。在它的内部,它在这些 PiP 按钮中设置了一些 OnClickListener。单击它们时,不会向系统发送广播、意图或类似内容,因此您可以收听它,PiP API 都没有提供将侦听器附加到这些按钮的方法。
目前检测这一点的唯一方法是使用 Activity 的 onResume 和 onStop 方法。当 Activity 从 PiP 恢复时,将在您的 Activity 上调用 onResume 和 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,你是对的,不可能检测默认画中画按钮上的点击事件,但有一种方法可以知道发生了什么。您应该重写
onPictureInPictureModeChanged
方法并检查 Activity 的生命周期。
在这里您可以找到不言自明的代码示例:
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
函数。
在 iOS Swift 中, 如何检测和区分 iOS Swift 中的 PIP 关闭和最大化按钮?
使用以下方法来检测何时单击最大化。
当用户去到不同的地方时,这可以用来手动将播放器返回到原始位置。在这种情况下,如果用户点击“关闭”按钮,它就会关闭,当他们点击“最大化”时,我们就可以随心所欲地控制了。
public func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) {
if let caller = delegate?.getPresentedViewController() {
var presentingVC = caller.presentingViewController
if presentingVC != nil {
return
}
// Maximized Button Clicked
delegate?.PIPdidMaximized()
} else{
completionHandler(true)
} }