私はMPRemoteCommandCenterを使って音楽プレーヤーのアプリケーションをコントロールしたいと思います。そして今、音楽を演奏して一時停止することができますが、次の/前の曲を再生することはできません。スレッドを使用して次の曲をMPRemoteCommandCenterで再生する方法
ユーザーがMPRemoteCommandCenterの次の曲ボタンをタップすると(ロック画面など)、startExtendBGJob()関数が呼び出されます。その後、スレッドを変更して曲のジョブを実行するように要求します。バックグラウンドジョブの解剖学を完全に理解していない)。 startNextPlay()関数で
func startExtendBGJob(taskBlock: @escaping() -> Void) {
registerBackgroundTask()
DispatchQueue.global(qos: .userInitiated).async {
DLog("APP into BG")
DispatchQueue.global(qos: .default).async {
taskBlock()
}
while self.isPlaying == false || self.tmpPlayer == nil { // waiting for new avplayer been created.
Thread.sleep(forTimeInterval: 1)
}
DispatchQueue.global(qos: .default).asyncAfter(deadline: .now() + 10) {
self.endBackgroundTask()
}
}
}
func registerBackgroundTask() {
bgIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: {
[weak self] in
guard let strongSelf = self else { return }
strongSelf.endBackgroundTask()
})
assert(bgIdentifier != UIBackgroundTaskInvalid)
}
func endBackgroundTask() {
UIApplication.shared.endBackgroundTask(bgIdentifier)
bgIdentifier = UIBackgroundTaskInvalid
isExtendingBGJob = false
DLog("App exit BG!")
}
だけで次の曲のURLを見つけ、そしてprepareToPlayは()次の曲を再生するための新しいAVPlayerを作成するためです。
self.tmpPlayer = AVPlayer(url: streamURL)
私は、英語のネイティブspearkerないんだけど、あなたは私が話しているものを理解していれば、ここで読むことをあなたにそんなに感謝:]。どんな助けも歓迎です。