gpt4 book ai didi

xcode - MacOS 在后台不响应 MPRemoteCommandCenter 命令

转载 作者:行者123 更新时间:2023-12-03 16:20:57 27 4
gpt4 key购买 nike

我正在出于自己的目的编写一个应用程序,旨在无论系统中发生什么情况都能获取播放暂停事件。我已经做了这么多工作

let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.togglePlayPauseCommand.isEnabled = true
commandCenter.togglePlayPauseCommand.addTarget { (MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
print("Play Pause Command")
return .success
}

commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget { (MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
print("NextTrackCommand")
return .success
}
commandCenter.previousTrackCommand.isEnabled = true
commandCenter.previousTrackCommand.addTarget { (MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
print("previousTrackCommand")
return .success
}
commandCenter.playCommand.isEnabled = true
commandCenter.playCommand.addTarget { (MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus in
print("playCommand")
return .success
}

MPNowPlayingInfoCenter.default().playbackState = .playing

大多数这些方法都在那里,因为显然如果没有实现 nextTrackCommand 或 previousTrackCommand 或 playCommand,您将不会收到任何通知。

无论如何,我的一个问题是,一旦您打开另一个使用音频的应用程序,这些事件处理程序就会停止被调用,并且我找不到一种方法来检测和修复此问题。

我通常会尝试执行 AVAudioSession 操作来将其声明为后台应用程序,但这似乎不起作用。无论系统处于什么状态,关于如何获取 playpause 事件有什么想法吗?

我希望能够始终监听这些事件或获得其他人何时控制音频的指示?也许甚至能够重新订阅这些播放暂停事件。

最佳答案

系统中有一个内部队列,其中包含所有音频事件订阅者。当您开始使用其他应用程序时,它们就会超越它。

I would like to be able to always listen for these events

没有可用的 API,但有一个肮脏的解决方法。如果我正确理解你的问题,这个片段:

    MPNowPlayingInfoCenter.default().playbackState = .paused
MPNowPlayingInfoCenter.default().playbackState = .playing

如果您在应用程序中的某处循环运行它,则必须为您解决问题。

请注意,这并不是 100% 可靠,因为:

  1. 如果在您切换到不同的应用程序后,在连续两次 playbackState 状态更改之前生成事件,则事件窗口中的应用程序仍会捕获该事件;
  2. 如果另一个应用程序正在执行相同的操作,队列中就会出现持续的竞争条件,从而导致不可预测的结果。

引用文献:

  • playbackState 文档 is here ;
  • 另请参阅 a similar question ;
  • 另请参阅 a bug report对于 mpv 具有类似的问题(MPRemoteCommandCenter 之前的一个,但仍然非常有值(value))

OR get an indication of when someone else has taken control of the audio

据我所知,macOS 中没有为此提供公共(public) API。

关于xcode - MacOS 在后台不响应 MPRemoteCommandCenter 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61296319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com