如何在 iPhone 应用程序中切换扬声器和耳机
Posted
技术标签:
【中文标题】如何在 iPhone 应用程序中切换扬声器和耳机【英文标题】:How to switch between speaker and headphones in iPhone application 【发布时间】:2010-04-18 14:44:15 【问题描述】:我编写了一个使用 AVAudioPlayer 播放音频的应用。
我已经实现了一个将音频切换到扬声器的功能:
UInt32 sessionCategory = kAudiosessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
但是当我尝试使用以下方法将其切换回耳机时:
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
它仍然通过扬声器路由。
我找不到任何其他方式来引导音频。谁能建议我做错了什么?
【问题讨论】:
【参考方案1】:根据Apple's documentation,音频会话路由覆盖仅在使用kAudioSessionCategory_PlayAndRecord
类别时可用。
您可以尝试将类别更改为kAudioSessionCategory_PlayAndRecord
并使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
属性键将音频路由到扬声器。
【讨论】:
【参考方案2】:就像 Laurent 所说,尝试像这样使用 PlayAndRecord:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
使用AVAudioSessionCategoryPlayAndRecord
非常重要,否则路由将无法到达扬声器。为音频会话设置覆盖路由后,您可以使用 AVAudioPlayer
实例并将一些输出发送到扬声器。
希望对其他人有用,就像对我一样。这方面的文档很分散,但 Skype 应用程序证明这是可能的。坚持下去,我的朋友们! :)
这里有一些 Apple 文档:http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html
在页面上搜索kAudioSessionProperty_OverrideAudioRoute
【讨论】:
以上是关于如何在 iPhone 应用程序中切换扬声器和耳机的主要内容,如果未能解决你的问题,请参考以下文章