【发布时间】:2015-11-17 12:32:37
【问题描述】:
我的应用让用户听到声音文件,我使用AVAudioPlayer 播放它。
我在一些应用程序中看到了一种非常好的行为,当用户将手机放在耳边时,声音扬声器会从普通扬声器变为耳麦。
我现在知道从哪里开始,我应该检测手机的移动并更改输出扬声器还是有任何本机实现这种行为?
【问题讨论】:
标签: ios objective-c iphone avplayer avaudiosession
我的应用让用户听到声音文件,我使用AVAudioPlayer 播放它。
我在一些应用程序中看到了一种非常好的行为,当用户将手机放在耳边时,声音扬声器会从普通扬声器变为耳麦。
我现在知道从哪里开始,我应该检测手机的移动并更改输出扬声器还是有任何本机实现这种行为?
【问题讨论】:
标签: ios objective-c iphone avplayer avaudiosession
实现此目的最直接的方法是在 UIDevice 中使用接近监控。近距离监控会告诉您手机是否靠近用户。
收听UIDeviceOrientationDidChangeNotification 并对proximityState 做出相应的更改——在您的情况下,重新路由音频。
对于类似的问题here,有一个彻底的答案。该答案包括补充细节,以结合设备运动以提高准确性。
【讨论】:
您正在寻找的是接近传感器(靠近 iphone 耳机的那个小硬件),而不是任何运动感应机制。接近传感器可通过公共 API 通过 UIDevice 的接近状态属性访问,该属性仅返回一个布尔值,指示传感器是否靠近用户:proximityState。
根据该值,您可以继续将音频路由到耳机。这可以通过使用AVAudioSession 类并专门将类别(setCategory:error)设置为AVAudioSessionCategoryPlayAndRecord 来实现。
【讨论】: