-
[iOS SDK] 이어폰(헤드셋) 연결상태 확인 예제Programming/iOS SDK 2011. 6. 29. 00:28반응형
/* AudioToolbox 헤더파일 임포트 ( AudioToolbox.framework 추가해야함.) */
#import <AudioToolbox/AudioToolbox.h>
/***
* 리스너 함수 (callback함수)
*
* inClientData : 사용자데이터 ( AudioSessionAddPropertyListener에서 4번째 인자값)
* inID : AudioSessionAddPropertyListener에서 1번째 인자값으로 현재는 한개의 ID만 사용하기 때문에 사용하지 않음
* inDataSize : inData의 크기
* inData : void*형으로 inID에 맞는 데이터형으로 캐스팅 필요
*/
void Listener(void *inClientData, AudioSessionPropertyID inID,
UInt32 inDataSize, const void *inData)
{
CFDictionaryRef routeChangeDict = inData;
UILabel* p = (UILabel*)inClientData;
// kAudioSession_AudioRouteChangeKey_Reason이름에 해당하는 값을 가져온다.
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue(routeChangeDict, CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
SInt32 routeChangeReason;
CFNumberGetValue(routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
switch(routeChangeReason)
{
case kAudioSessionRouteChangeReason_OldDeviceUnavailable:
{
// 헤드셋 분리
p.text = @"disconnected";
}break;
case kAudioSessionRouteChangeReason_NewDeviceAvailable:
{
// 헤드셋 연결
p.text = @"connected";
}
}
}
@implementation HeadsetConnectionStateAppDelegate
@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
// 연결상태를 화면에 표시할 레이블 생성
UILabel* statusLabel = [[UILabel alloc]initWithFrame:self.window.frame];
[self.window addSubview:statusLabel];
statusLabel.text = @"unknown";
/**
* 1. 오디오 세션 객체 초기화
* 오디오 세션을 사용하기 위해서 프로그램 내에서 최초 1회 AudioSessionInitialize를 호출해 주어야 함.
*/
OSStatus result = AudioSessionInitialize(NULL,NULL,NULL,NULL);
if(result) NSLog(@"AudioSessionInitialize error : %d", (int)result);
else
{
/**
* 2. 리스너 설정
* 1번째 인자 : kAudioSessionProperty_AudioRouteChange 값을 설정
* 2번째 인자 : 이벤트가 발생시 변경사항을 수신받을 리스너(callback)함수
* 3번째 인자 : 리스너함수 호출시 전달할 사용자데이터로 현재 예제의 경우에는 statusLabel을 설정함.
*/
result = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, Listener, statusLabel);
if (result)
{
NSLog(@"AudioSessionAddPropertyListener error : %d", (int)result);
}
}
[statusLabel release];
return YES;
}
- (void)dealloc
{
[_window release];
[super dealloc];
}
@end
HeadsetConnectionState.zip
반응형'Programming > iOS SDK' 카테고리의 다른 글
Application windows are expected to have a root view controller at the end of application launch (0) 2016.03.12 Xcode4 - iOS 도움말(developer library reference) Organizer에 추가하기 (0) 2011.04.13 XCode4 프로젝트이름 변경하기 (0) 2011.03.30