我正在使用该AVAudioPlayer
课程在我的应用程序中播放 .mp3 文件。是否可以检查耳机是否以编程方式连接到设备?
在第一代 iPod 设备中,当没有连接耳机时,音量控制栏是隐藏的(用于音乐和视频)。
我正在使用该AVAudioPlayer
课程在我的应用程序中播放 .mp3 文件。是否可以检查耳机是否以编程方式连接到设备?
在第一代 iPod 设备中,当没有连接耳机时,音量控制栏是隐藏的(用于音乐和视频)。
AudioSessionGetProperty
您可以通过调用该kAudioSessionProperty_AudioRoute
属性来获取当前的音频“路线” 。这会为您提供一个字符串,例如“耳机”或“扬声器”。
您还可以AudioSessionAddPropertyListener
用来监听路线何时发生变化(例如,断开耳机)
在此处查看苹果文档
AudioSessionGetProperty和AudioSessionAddPropertyListener在 iOS 7 中已弃用。
相反,使用: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;
}
}
有两种方法:
1) 检查音频路由的瞬时状态
这个答案为您提供了一种现成的方法来检测是否插入了耳机。
2) 监听路由改变事件,并在耳机和非耳机之间的路由改变时设置一个标志
(可能希望将第一个链接中的代码添加到此链接中,以实际确定耳机/非耳机状态是否已在路由更改回调中更改)