Как продолжить воспроизведение звука в фоновом режиме
У меня есть UIWebView, который воспроизводит видеоклипы в моем контроллере просмотра. Когда я выхожу из приложения, звук перестанет воспроизводиться, хотя я могу нажать воспроизведение в центре управления, чтобы продолжить его снова. Для этого я использую следующий код в своем AppDelegate.swift.
Когда приложение войдет в фоновый режим, я хочу, чтобы звук автоматически включался. Как включить MPMusicPlayerController/AVAudioPlayer (я действительно не уверен, что это такое), чтобы продолжить воспроизведение, чтобы пользователю не пришлось вручную нажимать кнопку воспроизведения?
У меня также есть "Audio and Airplay", отмеченный в разделе "Фоновые режимы" в моих целевых настройках, а "Требуемые фоновые режимы" - "Приложение воспроизводит аудио или передает аудио/видео с помощью AirPlay".
var error: NSError?
var success = AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: &error)
if !success {
NSLog("Failed to set audio session category. Error: \(error)")
}
UPDATE: я создаю пользовательский вид в своем 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()
}
Ответы
Ответ 1
Вы можете воспроизводить музыку на заблокированном экране с помощью
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;
}
}
}
В быстром вы можете использовать его.
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
Попробуйте обновить код следующим образом:
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
.
Источники: 1, 2.
Ответ 3
Общим "трюком" является воспроизведение белого звука, поддерживающего ваше приложение.
Но он отобразит красную жирную строку состояния