如何以编程方式检测iPhone中的耳机?

Che*_*Lai 16 iphone ipod audio-player

我目前正在开展一个项目,涉及在应用内部播放来自iphone音乐库的音乐.我正在使用MPMediaPickerController来允许用户选择他们的音乐并使用iPhone内的iPod音乐播放器播放它.

然而,当用户插入耳机并将其移除时,我遇到了问题.音乐将无缘无故地突然停止播放.经过一些测试后,我发现当用户从设备上拔下耳机时,iPod播放器会暂停播放.那么有没有办法以编程方式检测耳机是否已拔下,以便我可以继续播放音乐?或者有什么方法可以防止iPod播放器在用户拔下耳机时暂停?

pra*_*ash 9

您应该注册AudioRoute更改通知并实现您希望如何处理路由更改

    // Registers the audio route change listener callback function
    AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange,
                                     audioRouteChangeListenerCallback,
                                     self);
Run Code Online (Sandbox Code Playgroud)

在回调中,您可以获得路由更改的原因

  CFDictionaryRef   routeChangeDictionary = inPropertyValue;

  CFNumberRef routeChangeReasonRef =
  CFDictionaryGetValue (routeChangeDictionary,
            CFSTR (kAudioSession_AudioRouteChangeKey_Reason));

  SInt32 routeChangeReason;

      CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);

  if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) 
  {
       // Headset is unplugged..

  }
  if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable)
  {
       // Headset is plugged in..                   
  }
Run Code Online (Sandbox Code Playgroud)