用户移动手机时更改输出扬声器

Posted

技术标签:

【中文标题】用户移动手机时更改输出扬声器【英文标题】:change output speaker when user move his phone 【发布时间】:2015-11-17 12:32:37 【问题描述】:

我的应用让用户听到声音文件,我使用AVAudioPlayer 播放它。 我在一些应用程序中看到了一种非常好的行为,当用户将手机放在耳边时,声音扬声器会从普通扬声器变为耳麦。

我现在知道从哪里开始,我应该检测手机的移动并更改输出扬声器还是有任何本机实现这种行为?

【问题讨论】:

Is there any way to monitor user's movement of iphone like the "raise to speak" feature?的可能重复 【参考方案1】:

实现此目的最直接的方法是在 UIDevice 中使用接近监控。近距离监控会告诉您手机是否靠近用户。

收听UIDeviceOrientationDidChangeNotification 并对proximityState 做出相应的更改——在您的情况下,重新路由音频。

对于类似的问题here,有一个彻底的答案。该答案包括补充细节,以结合设备运动以提高准确性。

【讨论】:

【参考方案2】:

您正在寻找的是接近传感器(靠近 iphone 耳机的那个小硬件),而不是任何运动感应机制。接近传感器可通过公共 API 通过 UIDevice 的接近状态属性访问,该属性仅返回一个布尔值,指示传感器是否靠近用户:proximityState。 根据该值,您可以继续将音频路由到耳机。这可以通过使用AVAudiosession 类并专门将类别(setCategory:error)设置为AVAudioSessionCategoryPlayAndRecord 来实现。

【讨论】:

以上是关于用户移动手机时更改输出扬声器的主要内容,如果未能解决你的问题,请参考以下文章

如何在移动方向更改时重置 Disqus 宽度

电脑显示未插入扬声器和耳机?

ARFoundation系列讲解 - 17 ARKitCoachingOverlayView

ARFoundation系列讲解 - 17 ARKitCoachingOverlayView

安卓变声器-内购版安卓专业网速测试工具银河奇异果无广告版

移动 Safari 独立模式中的可见性更改