我正在使用AVAudioPlayer
类在我的应用中播放.mp3文件。是否可以通过编程方式检查耳机是否已连接到设备?
在第一代iPod设备中,当没有连接耳机时,音量控制条被隐藏(用于音乐和视频)。
答案 0 :(得分:5)
您可以使用AudioSessionGetProperty
属性调用kAudioSessionProperty_AudioRoute
来获取当前音频'路线'。
这会给你一个字符串,如“耳机”或“扬声器”。
你也可以使用AudioSessionAddPropertyListener
来监听路线何时发生变化(例如断开耳机)
请参阅apple docs here
答案 1 :(得分:2)
AudioSessionGetProperty 和 AudioSessionAddPropertyListener 。
相反,请使用:AVAudioSessionRouteChangeNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:nil];
监听器,
-(void)handleRouteChange:(NSNotification*)notification
{
NSInteger reason = [[[notification userInfo] objectForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
switch (reason) {
case AVAudioSessionRouteChangeReasonOldDeviceUnavailable :
break;
case AVAudioSessionRouteChangeReasonNewDeviceAvailable :
break;
case AVAudioSessionRouteChangeReasonOverride :
break;
case AVAudioSessionRouteChangeReasonCategoryChange :
break;
case AVAudioSessionRouteChangeReasonWakeFromSleep :
break;
case AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory :
break;
case AVAudioSessionRouteChangeReasonRouteConfigurationChange :
break;
case AVAudioSessionRouteChangeReasonUnknown:
default:
break;
}
}
答案 2 :(得分:0)
有两种方法:
1)检查音频路径的瞬时状态
Detect if headphones (not microphone) are plugged in to an iOS device
这个答案为您提供了一种现成的方法来检测是否插入了耳机。
2)监控路线更改事件,并在耳机和非耳机之间路线发生变化时设置标志
How to programmatically detect earpiece in iphone?
(可能希望将第一个链接中的代码添加到此中,以实际确定路由更改回调中是否更改了耳机/非耳机状态)