UIWebView:当应用程序进入后台时,HTML5音频在iOS 6中暂停

hey*_*hey 27 avfoundation uiwebview ios html5-audio ios6

美好的一天,

我的应用是一个音乐播放应用程序.我<audio>用Javascript 控制-Tag.到目前为止没有任何问题,播放,暂停,下一个和上一个按钮正在工作.当我在iOS 5中待机时,音乐会继续播放,但自动下一首歌不起作用.当它不处于待机状态时,它可以工作.在iOS 6中,只需按下按钮,音乐就会淡出.

锁定屏幕上的播放/暂停按钮适用于iOS 5,但不适用于iOS 6.

Chr*_*die 73

从iOS 6开始,您必须在创建UIWebView之前将音频会话类别设置为"回放".这就是你所要做的.没有必要使会话处于活动状态.

这也应该用于html视频,因为如果你没有配置会话,当铃声开关关闭时你的视频将被静音.

#import <AVFoundation/AVFoundation.h>

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
BOOL ok;
NSError *setCategoryError = nil;
ok = [audioSession setCategory:AVAudioSessionCategoryPlayback
                         error:&setCategoryError];
if (!ok) {
  NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError);
}
Run Code Online (Sandbox Code Playgroud)

确保您的目标链接到AVFoundation框架.


如果使用Cordova,您需要修改的文件是 platforms/ios/MyApp/Classes/AppDelegate.m,并且最终看起来像这样:

#import "AppDelegate.h"
#import "MainViewController.h"
#import <AVFoundation/AVFoundation.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    BOOL ok;
    NSError *setCategoryError = nil;
    ok = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
    if (!ok) {
        NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError);
    }

    self.viewController = [[MainViewController alloc] init];
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

@end
Run Code Online (Sandbox Code Playgroud)

此外,如评论中所述,您需要链接AVFoundation框架,如以下答案中所述:

  • 使用xcode打开您的项目 open ./platforms/ios/MyApp.xcworkspace/
  • 项目导航器>目标我的应用程序>常规
  • 滚动到底部以查找"链接的框架和库"

  • 我从来没有做过任何Objective-C,也不知道我应该用这段代码做什么,你能解释一下吗? (5认同)
  • 哇,这似乎与我遇到的类似问题有关.你在哪里找到了这个?有没有关于iOS6中使用UIWebView/AVAudioSession改变了什么的文档? (3认同)
  • @heysamhey这段代码可以放在ViewController.m中.import语句应该位于顶部,其余的可以放在`viewDidLoad`中.要链接AVFoundation框架,请查看[此答案在SO](http://stackoverflow.com/questions/19337890/how-to-add-an-existing-framework-in-xcode-5/19337932#19337932). (2认同)
  • @ChrisLundie也许您应该添加音频后台模式也需要在XCode功能选项卡中启用.只是为了完整性:-) (2认同)