[英]How to continue audio playback in background mode
我有一个UIWebView,可以在我的视图控制器中播放视频片段。 当我退出应用程序时,音频将停止播放,虽然我可以按控制中心的播放再次继续播放。 为此,我在AppDelegate.swift中使用以下代码。
当应用程序进入后台时,我希望音频自动开始播放。 如何启用MPMusicPlayerController / AVAudioPlayer(我真的不确定它是什么)继续播放,这样用户就不必手动按播放了?
我还在目标设置中的背景模式下选中了“音频和Airplay”,并将所需背景模式设置为“App播放音频或使用AirPlay传输音频/视频”。
var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if !success {
NSLog("Failed to set audio session category. Error: \(error)")
}
更新:我正在我的appDel
创建一个自定义视图,以容纳视频迷你播放器。 这就是我创造它的方式。 CustomWindow
是UIWindow
的自定义类,我在其中添加一个迷你播放器到视图层次结构的顶部。 在这段代码中,我在创建UIWebView
之前调用该方法吗?
class AppDelegate: UIResponder, UIApplicationDelegate {
let myWind = CustomWindow(frame:UIScreen.mainScreen().bounds)
var window: UIWindow? {
set {
}
get {
return myWind
}
}
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if success {
AVAudioSession.sharedInstance().setActive(true, error: nil)
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
} else {
NSLog("Failed to set audio session category. Error: \(error)")
}
myWind.showOrHidePopupWindow()
}
尝试使用以下代码更新代码:
var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if success {
AVAudioSession.sharedInstance().setActive(true, error: nil)
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
} else {
NSLog("Failed to set audio session category. Error: \(error)")
}
重要:
UIWebView
实例之前调用上面的代码。 你可以用锁屏播放音乐
var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if success {
AVAudioSession.sharedInstance().setActive(true, error: nil)
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
} else {
NSLog("Failed to set audio session category. Error: \(error)")
}
之后你需要在功能中添加背景模式像这样。 并且不要在模拟器上测试它在模拟器上不起作用。 希望能帮助到你
这就是你如何处理前一个,下一个,暂停和玩游戏: -
- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent
{
if (receivedEvent.type == UIEventTypeRemoteControl)
{
switch (receivedEvent.subtype)
{
case UIEventSubtypeRemoteControlTogglePlayPause:
[self togglePlayPause];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[self playPrevTrack];
break;
case UIEventSubtypeRemoteControlNextTrack:
[self playNextTrack];
break;
default:
break;
}
}
}
在swift中你可以像那样使用它
override func remoteControlReceivedWithEvent(event: UIEvent) {
let rc = event.subtype
println("received remote control \(rc.rawValue)") // 101 = pause, 100 = play
switch rc {
case .RemoteControlTogglePlayPause:
self.togglePlayPause()
break;
case .RemoteControlPreviousTrack:
self.playPrevTrack()
break;
case .RemoteControlNextTrack:
self.playNextTrack()
break;
default:break
}
一个常见的“技巧”是播放白色声音,让您的应用程序保持运行。 但它会显示一个红色的粗体状态栏
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.