在 iOS 8 上捕获音量增大/减小按钮按下的最佳/最干净的方法是什么?
理想情况下,我想捕捉按键,也防止系统音量的变化(或至少,防止音量变化HUD显示)。
有一些旧的答案使用了过时的方法,在iOS 8上似乎根本不起作用。这个iOS 8 specific one也不起作用。
这个RBVolumeButtons开源类似乎也不能在iOS 8上工作。
在 iOS 8 上捕获音量增大/减小按钮按下的最佳/最干净的方法是什么?
理想情况下,我想捕捉按键,也防止系统音量的变化(或至少,防止音量变化HUD显示)。
有一些旧的答案使用了过时的方法,在iOS 8上似乎根本不起作用。这个iOS 8 specific one也不起作用。
这个RBVolumeButtons开源类似乎也不能在iOS 8上工作。
9条答案
按热度按时间lnxxn5zx1#
对于Swift,你可以在viewController类中使用下面的代码:
然后添加此功能
此代码检测用户的显式音量更改操作,就像您没有检查显式操作一样,此函数将定期自动调用。
此代码不会阻止系统音量更改。
baubqpgj2#
先添加AVFoundation和MediaPlayer****Framework,然后使用下面的代码检测上下键,
rqdpfwrv3#
Swift 3:(记得补充:import MediaPlayer..)
....
axkjgtzd4#
这是一个2部分的答案,它们是独立的,在Swift 5中。
为了监听音量触发事件,
要隐藏系统音量控制,
ni65a41a5#
Objective-C版本(使用通知):
v440hwme6#
合并解决方案(Swift 5.2 / iOS 14测试)
AnyCancellable
设置一个变量;var volumeCancellable: AnyCancellable?
viewDidLoad
或其他地方),配置合并订阅器;viewDidLoad
或其他地方),设置音量控制和屏幕外的位置;基于@samwize上面的伟大回应。
sczxawaw7#
Swift 5 / iOS 15
在iOS 15上,通知名称重命名为 SystemVolumeDidChange。
添加通知观察者
监听音量变化
注意事项:
1.通知回调不在主线程上,所以我们需要使用DispatchQueue,以便Set一致。
h43kikqp8#
好的,请参阅音频会话服务参考以了解更多信息。您需要使用AudioSessionInitialize启动音频会话,然后使用AudioSessionSetActive使其处于活动状态,使用AudioSessionAddPropertyListener侦听音量的变化,并传递具有类型AudioSessionPropertyListener的回调。
这个网站写得很好:http://fredandrandall.com/blog/2011/11/18/taking-control-of-the-volume-buttons-on-ios-like-camera/
xmq68pz99#
Swift 5 / iOS 13
你已经需要一个
MPVolumeView
来使系统隐藏音量变化的HUD。我发现的最简单和最可靠的解决方案是观察MPVolumeView
本身的变化。设置过程中,通常为
viewDidLoad()
:响应音量变化: