设置AVAudioSession类别对WKWebView的声音没有影响

Lyl*_*att 7 ios avaudiosession cordova cordova-plugins wkwebview

从WKWebView播放音频时,我似乎无法覆盖AVAudioSession类别或端口.使用普通的UIWebView时,相同的代码可以正常工作.

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
Run Code Online (Sandbox Code Playgroud)

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

[session setActive: YES error: nil];
Run Code Online (Sandbox Code Playgroud)

上面的代码对来自WKWebView的音频没有影响.我确实在Twitter上发现一些报告称iOS 8.1正在将WKWebView音频与后台应用音频混合在一起,但我无法找到它的来源.请参阅此twitter帖子以供参考:https://twitter.com/marcoarment/status/530881842900373504

Pie*_*iet 2

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

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

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord 
                                 withOptions:AVAudioSessionCategoryOptionMixWithOthers
                                       error:&error];
Run Code Online (Sandbox Code Playgroud)

当然,这还有其他含义。您的应用程序的音频将与所有其他应用程序的音频混合,而不仅仅是您的网络视图的音频。