iOS 监听耳机状态


// iOS 7 的代码
- (BOOL)hasHeadset
{
#if TARGET_IPHONE_SIMULATOR
    return NO;
#else
    CFStringRef route;
    UInt32 size = sizeof(CFStringRef);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route);
    if((route == NULL) || (CFStringGetLength(route) == 0))
    {
        NSLog(@"AudioSessionGetProperty failed!");
    }
    else
    {
        NSString* routeStr = (__bridge NSString*)route;
        NSLog(@"AudioRoute: %@", routeStr);
        /* Known values of route:
         * "Headset"
         * "Headphone"
         * "Speaker"
         * "SpeakerAndMicrophone"
         * "HeadphonesAndMicrophone"
         * "HeadsetInOut"
         * "ReceiverAndMicrophone"
         * "Lineout"
         */
        NSRange headphoneRange = [routeStr rangeOfString : @"Headphone"];
        NSRange headsetRange = [routeStr rangeOfString : @"Headset"];
        if (headphoneRange.location != NSNotFound
            || headsetRange.location != NSNotFound)
        {
            return YES;
        }
    }
    
    return NO;
#endif
}

// iOS 6 之后的代码
- (void)addHeadPhoneListener
{
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self
               selector:@selector(audioRouteChangeListenerCallback:)
                   name:AVAudioSessionRouteChangeNotification
                 object:nil];
}

// If the user pulls out he headphone jack, stop playing.
- (void)audioRouteChangeListenerCallback:(NSNotification*)notification
{
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    AVAudioSessionRouteDescription *curRoute = audioSession.currentRoute;
    NSDictionary *interuptionDict = notification.userInfo;
    
    NSLog(@"interuptionDict:%@", interuptionDict);
    
    AVAudioSessionPortDescription * portDescription = [curRoute.outputs firstObject];
    AVAudioSessionPortDescription * inputDesc = [curRoute.inputs firstObject];
    
    //例如输出:Headphones,耳机
    NSLog(@"%@,%@", portDescription.portType, portDescription.portName);
    
    //例如输出:MicrophoneWired, 耳机麦克风
    NSLog(@"%@, %@", inputDesc.portType, inputDesc.portName);
    
    NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
//    AVAudioSessionRouteDescription *val = interuptionDict[AVAudioSessionRouteChangePreviousRouteKey];
    
    switch (routeChangeReason)
    {
        case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
            NSLog(@"Headphone/Line plugged in");
            break;
            
        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
            NSLog(@"Headphone/Line was pulled. Stopping player....");
            break;
            
        case AVAudioSessionRouteChangeReasonCategoryChange:
            break;
    }
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值