的UIWebView:HTML5音频暂停在IOS 6时应用进入背景(UIWebView: HTML5

2019-06-17 12:22发布

美好的一天,

我的应用程序是一个音乐播放程序。 我控制<audio> -Tag的Javascript。 到目前为止,尚无任何问题,播放,暂停,下一个和上一个按钮是否工作。 当我在iOS 5的备用设备,音乐继续播放,但自动下一首歌曲不起作用。 当它不是待机,它的工作原理。 而在iOS 6中,仅仅按下按钮后,音乐淡出。

在锁定屏幕上的播放/暂停按钮,在iOS 5的工程,但不是在iOS 6中。

Answer 1:

与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);
}

确保你的目标链接到AVFoundation框架。


如果使用科尔多瓦,您需要修改该文件是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

此外,如在评论中提到的,你需要链接的AVFoundation框架,在解释这个答案 :

  • 和Xcode打开项目open ./platforms/ios/MyApp.xcworkspace/
  • 项目导航>针对我的应用>综合
  • 滚动至底部找到链接的框架和库


Answer 2:

这个插件可以让你的应用程序忽略静音开关。 它基本上是相同的代码,这是在其他的答案,但它很好地包裹成一个插件,这样你就不必做任何手动Objective C的编辑。

https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio

运行此命令将其添加到您的项目:

cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio.git


Answer 3:

斯威夫特语法:

在AppDelegate中:

import AVFoundation

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  do{
      let audio = AVAudioSession.sharedInstance()
      try audio.setCategory(AVAudioSessionCategoryPlayback)
  }catch let error as NSError{
     print(error)
  }
}


Answer 4:

在这里,SWIFT 2.0版本创建的UIWebView之前设置音频会话类别为“播放”。

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
}
catch let error as NSError {
    print(error)  
}

do {
    try AVAudioSession.sharedInstance().setActive(true)
}
catch let error as NSError {
    print(error)  
}


文章来源: UIWebView: HTML5 audio pauses in iOS 6 when app enters background