检查以编程方式连接到设备的耳机?

时间:2009-11-11 09:31:49

标签: iphone avaudioplayer

我正在使用AVAudioPlayer类在我的应用中播放.mp3文件。是否可以通过编程方式检查耳机是否已连接到设备?

在第一代iPod设备中,当没有连接耳机时,音量控制条被隐藏(用于音乐和视频)。

3 个答案:

答案 0 :(得分:5)

您可以使用AudioSessionGetProperty属性调用kAudioSessionProperty_AudioRoute来获取当前音频'路线'。 这会给你一个字符串,如“耳机”或“扬声器”。

你也可以使用AudioSessionAddPropertyListener来监听路线何时发生变化(例如断开耳机)

请参阅apple docs here

答案 1 :(得分:2)

iOS 7中不推荐使用

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?

(可能希望将第一个链接中的代码添加到此中,以实际确定路由更改回调中是否更改了耳机/非耳机状态)