iOS耳机监听

Posted 邗影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS耳机监听相关的知识,希望对你有一定的参考价值。

1 .插入耳机的时候并没有切换到耳机播放 仍然是扬声器播放 2 .当一开始手机上已经插入耳机时 ,这时候开启音频播放时 仍然是扬声器播放 因此今天主要谈的就是从这两个问题:

先来解决第一个问题:其实解决耳机插入时扬声器播放很明显我们需要获取耳机插入的这个状态,通过什么来获取呢?通知,没错 就是通过通知的方式来获取,代码如下有需要的自取:

 //耳机状态获取的通知
 [[NSNotificationCenter defaultCenter]
          addObserver:self
             selector:@selector(audioRouteChangeListenerCallback:)
                 name:AVAudiosessionRouteChangeNotification
               object:[AVAudioSession sharedInstance]];

/**
 *  监听耳机插入拔出状态的改变
 *  @param notification 通知
 */
- (void)audioRouteChangeListenerCallback:(NSNotification *)notification {
      NSDictionary *interuptionDict = notification.userInfo;
      NSInteger routeChangeReason   = [[interuptionDict
          valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
      switch (routeChangeReason) {
            case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
                  DLog(@"AVAudioSessionRouteChangeReasonNewDeviceAvailable");
                  //插入耳机时关闭扬声器播放
                  [self.agoraKit setEnableSpeakerphone:NO];
                  break;
            case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
                  DLog(@"AVAudioSessionRouteChangeReasonOldDeviceUnavailable");
                  //拔出耳机时的处理为开启扬声器播放
                  [self.agoraKit setEnableSpeakerphone:YES];
                  break;
            case AVAudioSessionRouteChangeReasonCategoryChange:
                  // called at start - also when other audio wants to play
                  NSLog(@"AVAudioSessionRouteChangeReasonCategoryChange");
                  break;
      }
}

第二个问题的解决:很明显再开启音视频之前,我们需要判断是否手机上已经插入了耳机或者其他设备(这里单纯说耳机),方法如下:

/**
 *  判断是否有耳机
 *
 *  @return 判断是否有耳机
 */
- (BOOL)hasHeadset {
      AVAudioSession *audioSession = [AVAudioSession sharedInstance];

      AVAudioSessionRouteDescription *currentRoute = [audioSession currentRoute];

      for (AVAudioSessionPortDescription *output in currentRoute.outputs) {
            if ([[output portType] isEqualToString:AVAudioSessionPortHeadphones]) {
                  return YES;
            }
      }
      return NO;
}

我们通过这个方法来进行判断,如果开启音视频之前判断有耳机设备,那么直接关闭扬声器播放,否则开启,这样就解决了我前面所说的两个问题



作者:再见远洋,转


以上是关于iOS耳机监听的主要内容,如果未能解决你的问题,请参考以下文章

Android怎样监听蓝牙耳机的按键事件

Android怎样监听蓝牙耳机的按键事件

android耳机插拔监听做不了全局注册吗

iOS-蓝牙拍照

Android监听耳机按键事件

耳机插好了吗? IOS 7