代码之家  ›  专栏  ›  技术社区  ›  Biranchi

是否以编程方式检查耳机与设备的连接?

  •  4
  • Biranchi  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 10 年前
        1
  •  5
  •   Gopalakrishnan Subramanian Alex Deem    13 年前

    您可以通过拨打 AudioSessionGetProperty kAudioSessionProperty_AudioRoute 财产。 这会给你一个字符串,比如“耳机”或“扬声器”。

    您也可以使用 AudioSessionAddPropertyListener 当线路改变时收听(如断开耳机)

    查看苹果文档 here

        2
  •  2
  •   David James    10 年前

    音频会话网络属性 音频会话添加属性侦听器 在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;
        }
    }
    
        3
  •  0
  •   Community CDub    8 年前

    有两种方法:

    1)检查音频路由的瞬时状态

    Detect if headphones (not microphone) are plugged in to an iOS device

    这个答案为你提供了一个现成的方法来检测耳机是否插入。

    2)监视路由更改事件,并在耳机和非耳机之间的路由更改时设置标志。

    How to programmatically detect earpiece in iphone?

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