我有一个UIWebView,可以在我的视图控制器中播放视频片段。当我退出应用程序时,音频将停止播放,虽然我可以按控制中心的播放再次继续播放。为此,我在AppDelegate.swift中使用以下代码。
当应用进入后台时,我希望音频自动开始播放。如何启用MPMusicPlayerController / AVAudioPlayer(我真的不确定它是什么)继续播放,以便用户不必手动按播放?
我还有"音频和Airplay"在我的目标设置中的背景模式下检查,并且所需的背景模式设置为"应用播放音频或使用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()
}
答案 0 :(得分:5)
尝试使用以下代码更新代码:
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)")
}
重要:强>
答案 1 :(得分:4)
您可以使用
在锁屏中播放音乐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
}
答案 2 :(得分:-1)
常见的"技巧"是播放白色声音,让您的应用程序运行。 但它会显示一个红色的粗体状态栏