- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 MPRemoteCommandCenter 来控制我的音乐播放器应用程序。现在它可以播放和暂停音乐,但不能播放下一首/上一首歌曲,只有很少的机会可以播放。
当用户点击 MPRemoteCommandCenter 中的下一首歌曲按钮(例如在锁定屏幕中)时,它将调用 startExtendBGJob() 函数,然后我请求一个线程来执行更改歌曲工作(我认为错误就在这里,因为我'我不完全了解后台作业的结构)。
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!")
}
在startNextPlay()函数中只是找到下一首歌曲的url,而prepareToPlay()用于创建一个新的AVPlayer来播放下一首歌曲。
self.tmpPlayer = AVPlayer(url: streamURL)
我不是以英语为母语的矛手,如果您明白我在说什么,非常感谢您阅读这里:]。欢迎任何帮助。
最佳答案
对不起,是我的错。它不需要任何后台工作。只需更改如下内容:
UIApplication.shared.beginReceivingRemoteControlEvents()
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
DLog("fail to set category: \(error)")
}
确保它是AVAudioSessionCategoryPlayback
关于ios - 如何使用线程通过MPRemoteCommandCenter播放下一首歌曲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40548345/
我是 Android 编程的新手,我正在尝试制作一个简单的媒体播放器应用程序,该应用程序可以从用户的 SD 卡中提取歌曲并使用户能够播放歌曲。我面临的问题是,当一首歌正在播放时,如果用户点击其他歌曲,
使用 AVAudioPlayer 我们可以使用这种方法循环播放多首歌曲: - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player suc
这是一道系统设计题。 假设我们有一个服务可以在听到歌曲时通知我们。让我们设计一个新服务,它能够返回过去 24 小时内听得最多的前 K 首歌曲。假设我们有大约 10 亿首歌曲和大约 2 亿用户。 将您的
由于我是 Flash CS6 actionscript 3 的新手,有人可以具体地举一个详细的例子,向我解释一下如何向我的播放器添加 2 首歌曲,并且仍然使用当前的播放和暂停按钮来控制它们吗? 非常感
我是一名优秀的程序员,十分优秀!