用户电话后快速开始音乐
Posted
技术标签:
【中文标题】用户电话后快速开始音乐【英文标题】:swift start music after user phone call 【发布时间】:2020-07-31 01:23:34 【问题描述】:我不太确定我是否缺少某个功能或某些东西,但是当用户电话响起或他们询问 siri 或任何阻止我的应用程序音频播放的事情时。用户完成任务后,它不会重新启动我的应用程序播放。
我想知道是否有我缺少的功能,或者 Apple ios 应用程序不能做到这一点?
我认为这与以下内容有关:
func setupRemoteTransportControls()
// Get the shared MPRemoteCommandCenter
let commandCenter = MPRemoteCommandCenter.shared()
// Add handler for Play Command
commandCenter.playCommand.addTarget [unowned self] event in
if self.player?.rate == 0.0
self.player?.play()
return .success
return .commandFailed
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget [unowned self] event in
if self.player?.rate == 1.0
self.player?.pause()
return .success
return .commandFailed
// self.nowplaying(artist: "Anna", song: "test")
我发现我需要添加这部分但是我怎么称呼它?
func handleInterruption(notification: Notification)
guard let userInfo = notification.userInfo,
let interruptionTypeRawValue = userInfo[AVAudioSessionInterruptionTypeKey] as? UInt,
let interruptionType = AVAudioSession.InterruptionType(rawValue: interruptionTypeRawValue) else
return
switch interruptionType
case .began:
print("interruption began")
case .ended:
print("interruption ended")
default:
print("UNKNOWN")
【问题讨论】:
您的 av 会话是如何配置的? 我们目前没有 AVSession - 我只发现这是需要的。 developer.apple.com/library/archive/documentation/Audio/… 不确定这是否会进入我的视图控制器 【参考方案1】:您需要将音频会话设置为AVAudioSessionCategoryPlayback
。如果不设置此模式,则默认模式为AVAudioSessionCategorySoloAmbient
。
您可以在didFinishLaunching
中设置模式。
例如
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
// Get the singleton instance.
let audioSession = AVAudioSession.sharedInstance()
do
// Set the audio session category, mode, and options.
try audioSession.setCategory(.playback, mode: .default, options: [])
catch
print("Failed to set audio session category.")
// Other post-launch configuration.
return true
您还需要实现interruption observation
func setupNotifications()
// Get the default notification center instance.
let nc = NotificationCenter.default
nc.addObserver(self,
selector: #selector(handleInterruption),
name: AVAudioSession.interruptionNotification,
object: nil)
@objc func handleInterruption(notification: Notification)
// To be implemented.
【讨论】:
所以我补充说,我没有看到任何可以告诉我会话是否被中断的信息。 developer.apple.com/documentation/avfoundation/avaudiosession/…以上是关于用户电话后快速开始音乐的主要内容,如果未能解决你的问题,请参考以下文章