【发布时间】:2022-01-06 16:34:50
【问题描述】:
我目前正在开发 PTT(一键通)应用程序。 我正在尝试使用硬件音量按钮来开始/停止传输。
到目前为止我看到的所有建议的解决方案都可以缩小到两个:
- 使用KVO观察
AVAudioSession属性outputVolume。 - 使用私有 API 通知,即
AVSystemController_SystemVolumeDidChangeNotification并且从 iOS 15.0 开始 -SystemVolumeDidChange。
没有深入了解每种解决方案的优缺点,它们都有一个共同点 - 它们都是基于数量的,这会引发几个问题。
- 按音量按钮可更改系统音量。虽然这可以通过重置系统音量来解决,但这并不是一个很好的解决方案。
- 无法区分来自硬件按钮的音量变化和来自命令中心的音量变化,因此按钮的使用仅限于应用程序处于前台并处于活动状态时。
- 当用户按下音量按钮时,在第一个音量变化事件和随后的连续事件之间会有短暂的延迟,这使得很难跟踪快速按下和释放。
我注意到 Zello 应用程序以某种方式设法克服了这些问题,因为即使在设备关闭或命令中心打开时,它们也可以使用音量按钮 - 不会对系统音量产生任何干扰。另外从指挥中心改变音量也没有效果。
有没有人知道如何实现这种行为?
【问题讨论】:
-
support.zello.com/hc/en-us/articles/… Zello 删除了这个功能