【问题标题】:Alternative to AVSystemController_AudioVolumeNotificationParameter post iOS 15?iOS 15 后 AVSystemController_AudioVolumeNotificationParameter 的替代方案?
【发布时间】:2021-12-10 12:47:52
【问题描述】:

在达到最小/最大输出音量后,用于响应设备音量变化的approved KVO approach 停止检测音量按钮按下。我想在最小/最大之后继续接收这些按钮按下事件,所以我认为我需要尝试this solution,即使它不受 Apple 支持。但是,我是一个非常业余的 iOS 程序员,所以我可以使用提示。这是我一直在做的事情(使用 RxSwift):

NotificationCenter.default.rx.notification(Notification.Name(rawValue: "AVSystemController_AudioVolumeNotificationParameter"))
                .subscribe(onNext: { [weak self] notification in
                    guard let my = self else { return }
                    my.volumeNotification.accept(notification.userInfo!["AVSystemController_AudioVolumeNotificationParameter"] as! Double)
                })
                .disposed(by: disposeBag)

我应该订阅名为“MPVolumeControllerDataSource_SystemVolumeDidChange”的通知吗?

提前致谢!

【问题讨论】:

    标签: ios volume ios15


    【解决方案1】:

    为开源喝彩三声,具体来说:JPSVolumeButtonHandler。这个组件像冠军一样工作,并使用 Apple 认可的 KVO 技术。请注意,此组件将 AVAudioSession 选项设置为 .mixWithOthers,这会阻止 MPRemoteCommandCenter 接收/处理任何蓝牙命令。所以如果你需要BT(Swift 5):

    let volumeButtonHandler = JPSVolumeButtonHandler(up: {
        // handle up press
    }, downBlock: {
        // handle down press
    })
    volumeButtonHandler.sessionOptions = [] // allow remote BT
    

    我还发现,在初始化按钮处理程序之前以编程方式将设备音量设置为 0.5 可以避免偶尔出现最小/最大障碍。如果设备初始音量接近最小值或最大值,则处理程序将在按下几个按钮后停止:

    try AVAudioSession.sharedInstance().setActive(true, options: [])
    MPVolumeView(frame: .zero).volumeSlider.value = 0.5
    

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多