我想知道如何使用AVAudioPlayer播放音频到手机的内部耳机。
当连接耳机时,音频应播放其必须播放的内部耳机(AVAudioPlayer永远不应播放电话的底部扬声器)。
有没有办法实现这个目标?欢迎iOS 7+答案!
答案 0 :(得分:1)
有趣的是,有关Android问题的答案有多少,iOS问题答案要少得多。
这是我设法找到的解决方案:
NSError *error;
// Initialize Audio Player
_player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:_audioPath] error:&error];
// Set Audio Session to "Play and Record", UNFORTUNATELY this is the only way to play
// from the internal speaker. It asks the user to grant Recording permission to the app.
NSError *setCategoryError = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: &setCategoryError];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
if (setCategoryError) {
CLS_LOG(@"Error routing audio: %@",setCategoryError);
[self.navigationController popViewControllerAnimated:YES];
}
[_player prepareToPlay];
// And now you can play from the internal speaker.
您可以看到我必须使用AVAudioSessionCategoryPlayAndRecord
,因为它是唯一一种将音频路由到接收器的类别(在通话时您握住的小扬声器)请参阅{{ 3}}供参考。
实际上,有一个名为the audio session programming guide的方法看起来很有希望,但它只能用AVAudioSessionCategoryPlayAndRecord
强制设备使用外部扬声器,反之亦然。