ios - 如何控制音乐播放器的耳机?

标签 ios swift xcode swift3 avplayer

我正在创建一个音乐播放器 iOS 应用程序并从 firebase 获取数据。我可以在模拟器或 iPhone 中控制播放、暂停、下一个和上一个。当耳机连接到设备播放时,下一个和上一个功能无法正常工作。 这是我使用过的代码;

 func setupRemoteCommandCenter() {

    // Get the shared MPRemoteCommandCenter

    let commandCenter = MPRemoteCommandCenter.shared()

    // Add handler for Play Command

    commandCenter.playCommand.addTarget { event in

            player?.play()

        print("headset play")

        return .success
    }

    // Add handler for Pause Command

    commandCenter.pauseCommand.addTarget { event in

        player?.pause()

        print("headset pause")

        return .success
    }        

    // Add handler for Next Command

    commandCenter.nextTrackCommand.addTarget { event in

        return .success
    }

    // Add handler for Previous Command

    commandCenter.previousTrackCommand.addTarget { event in

        return .success
    }
}

并在viewdidload中调用setupRemoteCommandCenter函数

最佳答案

This document says要接收玩家事件通知,您需要

  1. 开始播放音频
  2. 成为“正在播放的应用”

“正在播放的应用程序”的定义很难确定,但似乎是任何具有事件的、不可混合的 Audio Session 并且正在播放音频(或具有最近播放了音频,这里似乎有一个短暂的宽限期)。一种可能的不可混合 Audio Session 是:

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSessionCategoryPlayback)
    try session.setActive(true)
} catch let err as NSError {
    print("Error setting up non mixable audio session \(err)")
}

附注如果您希望耳机控件在屏幕锁定时工作(或者如果您希望锁屏控件为此工作),您需要将音频添加到背景模式,因为从技术上讲,如果屏幕被锁定,那么您的应用程序有背景:

enter image description here

关于ios - 如何控制音乐播放器的耳机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024682/

相关文章:

SwiftUI 系统光标

swift - isUserInteractionEnabled = false 仍然允许双击手势

ios - 依赖项 `Firebase/Core` 未在任何具体目标中使用

ios - 分段控件在每个段中设置属性标题

android - Cocos2d-x跨平台游戏开发

ios - TabBar 显示 9 个项目而不是更多按钮

c++ - Xcode 5.1 针对 C++98 编译,避免 C++11 特性

ios - 修改低、中、高频核心音频IOS

iOS 应用商店评级(跟踪用户的操作)

iphone - 为东部时区的 future 日期设置本地通知