27

再会,

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

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

4

4 回答 4

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

确保您的目标链接到 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

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

  • 用 xcode 打开你的项目open ./platforms/ios/MyApp.xcworkspace/
  • 项目导航器 > 目标我的应用程序 > 常规
  • 滚动到底部以查找链接的框架和库
于 2012-09-13T21:00:17.637 回答
1

此插件将使您的应用忽略静音开关。它与其他答案中的代码基本相同,但它被很好地包装在插件中,因此您不必进行任何手动目标 c 编辑。

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

运行以下命令将其添加到您的项目中:

cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio.git
于 2015-02-05T01:51:10.137 回答
1

斯威夫特语法:

在 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)
  }
}
于 2016-03-04T03:39:31.183 回答
0

这里 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)  
}
于 2016-04-18T13:20:01.157 回答