【问题标题】:WKWebView Media Player fullscreen detectionWKWebView 媒体播放器全屏检测
【发布时间】:2015-01-31 21:56:12
【问题描述】:

在 iOS 8 之前,只要媒体播放器从 UIWebView 进入全屏模式,就会发送 UIMoviePlayerControllerDidEnterFullscreenNotification 通知。在 iOS 8 中,这不会发生,有些人建议改为收听AVPlayerItemBecameCurrentNotification 通知。这似乎不是从 WKWebView 发送的。侦听 UIWindowDidBecomeVisibleNotification 通知不起作用,因为它会针对所有添加的窗口(包括广告网络等)触发

底线,我整晚都在研究这个,我似乎无法弄清楚如何确定视频是否使用 WKWebView 全屏打开。任何帮助将不胜感激。

编辑:为了确认,我创建了一个空白项目。添加了一个 UIWebView 和 AVPlayerItemBecameCurrentNotification 监听器,当我播放视频并进入全屏时它被触发。我将该 UIWebView 切换为 WKWebView 并且不再触发该通知。

【问题讨论】:

  • 我能找到的最好的方法是UIWindowDidBecomeKeyNotification,用于确定另一个窗口何时接管。幸运的是,当我创建横幅广告时,这并没有触发。然后我设置了一个windowBecameKey 变量并在UIWindowDidBecomeHiddenNotification 上对其进行了测试。我看到的唯一可能使这有点脆弱的是UIWindowDidBecomeKeyNotification 在全屏窗口隐藏之前再次触发。如果由于某种原因,它随后触发,它可能会破坏事物。
  • 可以从 WKWebView stackoverflow.com/questions/55377677/…找到任何实际的 avplayeritem 实例

标签: ios ios8 wkwebview


【解决方案1】:

此解决方法似乎适用于 iOS8 和 iPhone 6

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowBecameHidden:) name:UIWindowDidBecomeHiddenNotification object:nil];

    return TRUE;
}

- (void)windowBecameHidden:(NSNotification *)notification {

    UIWindow *window = notification.object;

    if (window != self.window) {    // Not my own window: assuming the video window was hidden, maybe add some more checks here.

            // Add code here
    }
}

【讨论】:

【解决方案2】:

我只需要这样做。我用这个答案https://stackoverflow.com/a/7955014/1271424 收听了所有通知,发现:除了关于创建新窗口 (_UIWindowContentWillRotateNotification) 和 MPRemote (MPRemoteCommandTargetsDidChangeNotification) 的通知外,根本没有关于全屏模式的通知。

在 iPad 8.1.1 上测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多