ios - 设置 AVAudioSession 类别对来自 WKWebView 的声音没有影响

标签 ios cordova cordova-plugins avaudiosession wkwebview

当从 WKWebView 播放音频时,我似乎无法覆盖 AVAudioSession 类别或端口。使用普通的 UIWebView 时,相同的代码可以完美运行。

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];

我也试过像这样激活 sharedInstance,但没有帮助:

[session setActive: YES error: nil];

以上代码对来自 WKWebView 的音频没有影响。我确实在 Twitter 上发现了一些关于 iOS 8.1 正在将 WKWebView 音频与后台应用程序音频混合的报道,但我找不到它的来源。请参阅此推特主题以供引用:https://twitter.com/marcoarment/status/530881842900373504

最佳答案

很明显,WKWebView 在与您的应用程序不同的进程中运行。这可能意味着,它也有自己的 AudioSession,与您应用程序的 AudioSession 分开。这就是为什么更改应用程序的 AudioSession 不会影响 webView。以及为什么它与 UIWebView 一起工作(没有单独的过程)。至少这是我到目前为止收集到的...

我的解决方案是允许我的应用程序的 AudioSession 与其他的混合:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord 
                                 withOptions:AVAudioSessionCategoryOptionMixWithOthers
                                       error:&error];

当然这还有其他含义。您应用的音频将与所有其他应用的音频混合,而不仅仅是您的 webview 的。

关于ios - 设置 AVAudioSession 类别对来自 WKWebView 的声音没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152211/

相关文章:

ios - 链接器命令失败,退出代码为 1

ios - Swift:UICollectionView - 单元格之间的固定空间

android - Cordova 和 Angular : plugins not working

javascript - 在javascript中动态检索值

android - 通过 Cordova 完成 android Activity

ios - 在 Swift 中捕获闭包值

ios - 在 iOS 中按下按钮时打开另一个 View

java - 从Android设备上的后台服务监听联系人数据库的变化

ios - 提交到应用商店时 Cordova "Apple will stop accepting submissions of apps that use UIWebView"警告

visual-studio-2015 - 无法在 Windows 10 上使用 cordova-plugin-websql