ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    반응형
Designed by Tistory.