美好的一天,
我的应用是一款音乐播放应用。我使用Javascript控制<audio>
- 标记。到目前为止没有任何问题,播放,暂停,下一个和上一个按钮正在工作。当我在iOS 5中待机时,音乐会继续播放,但自动下一首歌不起作用。当它不处于待机状态时,它可以工作。在iOS 6中,只需按下按钮,音乐就会淡出。
锁定屏幕上的播放/暂停按钮适用于iOS 5,但不适用于iOS 6。
答案 0 :(得分: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框架,如this answer中所述:
open ./platforms/ios/MyApp.xcworkspace/
答案 1 :(得分:1)
此插件会让您的应用忽略静音开关。它与其他答案中的代码基本相同,但它很好地包装在插件中,因此您无需进行任何手动目标编辑。
https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio
运行此命令将其添加到项目中:
cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio.git
答案 2 :(得分:1)
Swift语法:
在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)
}
}
答案 3 :(得分:0)
这里是SWIFT 2.0版本,用于将音频会话类别设置为“播放”#39;在创建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)
}