2017-01-23 10 views
3

まず、私はバックグラウンドでAVPlayerを再生する方法を尋ねていません。そのための解決策はたくさんあります。私の問題は少し違う。AVPlayerをバックグラウンドから起動するには?

私のアプリケーションのAVPlayerは「AVPlayerItem」の配列を再生しています。最後の曲が終わったら、最初の曲からプレイヤーを始めます。これは、アプリケーションがアクティブな状態になっても完全にうまく動作しますが、曲を再生しているときにホームボタンを押して、最後の曲がバックグラウンドで再生されていれば完全に機能します。ここでプレイヤーが停止すると、最初の曲が再び開始されません。

なぜこの種の動作と何が解決策になる可能性がありますか。

答えて

1

あなたはこの設定する必要があります。そして、 enter image description here

を、のように従ってください:

do { 
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
    print("AVAudioSession Category Playback OK") 
    do { 
     try AVAudioSession.sharedInstance().setActive(true) 
     UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 
     print("AVAudioSession is Active") 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
} catch let error as NSError { 
    print(error.localizedDescription) 
} 

をまた、オーディオを再生するには:

var backgroundMusicPlayer = AVAudioPlayer() 

func playBackgroundMusic(filename: String) { 
    let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil) 
    guard let newURL = url else { 
     print("Could not find file: \(filename)") 
     return 
    } 
    do { 
     backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: newURL) 
     backgroundMusicPlayer.numberOfLoops = -1 
     backgroundMusicPlayer.prepareToPlay() 
     backgroundMusicPlayer.play() 
    } catch let error as NSError { 
     print(error.description) 
    } 
} 

を次に、主:

override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     self.becomeFirstResponder() 
     UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 
    } 

あなたのAppDelegateでFinalでイベントを受け取る:

override func remoteControlReceivedWithEvent(event: UIEvent?) { 
     let rc = event!.subtype 
     print("does this work? \(rc.rawValue)") 
    } 
+0

は魅力的です。ありがとう。 – rv7284

関連する問題