iOS Audio中preferredPolarPattern与selectedPolarPattern的区别是什么
preferredPolarPattern与selectedPolarPattern核心差异 两个属性的本质区别是:前者是开发者向系统提交的诉求值,后者是系统最终确定的实际生效值。
两个属性的具体释义
官方定义的中文翻译如下:
/// 描述当前实际选中的极性模式,对于没有可选择模式的数据源,该值为nil @property (readonly, nullable) AVAudioSessionPolarPattern selectedPolarPattern API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos, macos); /// 描述开发者设置的偏好极性模式,对于没有可选择模式的数据源、或是开发者没有设置过偏好的场景,该值为nil @property (readonly, nullable) AVAudioSessionPolarPattern preferredPolarPattern API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos, macos);
preferredPolarPattern
该值记录的是开发者通过setPreferredPolarPattern:error:方法主动设置的麦克风指向性偏好,仅代表你希望系统采用的模式,不保证一定会生效:
- 你设置的模式不在当前数据源的支持列表中时,系统会忽略你的设置,该值仍会记录你提交的偏好
- 即使你的设置符合要求,系统也可能因为更高优先级的音频任务(比如来电、系统语音唤醒)临时切换模式,该值不会随系统临时切换改变
selectedPolarPattern
该值是麦克风硬件当前真实使用的指向性模式,完全由系统根据当前所有音频任务的优先级、硬件支持能力最终决定:
- 当你的偏好设置被系统采纳时,该值和
preferredPolarPattern一致 - 当系统因为其他原因调整了麦克风模式时,该值会同步更新为实际生效的模式,和你设置的偏好无关
常见不一致场景
举个实际场景:你开发的录音App需要心型指向模式降低环境噪音,你调用方法将preferredPolarPattern设置为心型,录音过程中突然有来电接入:
- 此时
preferredPolarPattern的值仍然是你设置的心型 selectedPolarPattern会被系统切换为通话场景默认的全指向模式- 通话结束后如果系统恢复你的录音会话,两个值会重新变为一致
内容的提问来源于stack exchange,提问作者h.and.h
相关产品推荐
相关产品推荐

