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;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.