iOS 스니퍼 상태

2970 단어 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;
    }
}

좋은 웹페이지 즐겨찾기