Подтвердить что ты не робот

Как продолжить воспроизведение звука в фоновом режиме

У меня есть 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()
}
4b9b3361

Ответ 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

Общим "трюком" является воспроизведение белого звука, поддерживающего ваше приложение. Но он отобразит красную жирную строку состояния