用户电话后快速开始音乐

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/…

以上是关于用户电话后快速开始音乐的主要内容,如果未能解决你的问题,请参考以下文章

快速从用户电话号码中获取电话国家代码

快速排序

python 八大排序快速排序

Elasticsearch 快速开始

快速排序--数据结构篇

数据结构-快速排序算法