[iPhone Dev] 아이폰이 매너 모드 (silent mode, vibration mode?)로 전환 되는 것을 감지하기

4 Comments

안녕하세요.

일이 있어서 SNS를 한 동안 중단하였다가 블로그부터 다시 재개합니다.

조금 늦었지만, 흑룡의 해 복 많이 받으시고, 원하시는 것을 꾸준히 하셔서 성취하시길 기원합니다.

(문의나 댓글에 답변을 못 드려 죄송합니다. 이 후 성실히 답변하겠습니다. T.T)

 

* 아이폰의 좌측 상단의 스위치로 매너 모드  (silent / vibration mode, 진동 모드?) 로 전환 되는 것을 감지하기 코드입니다.

참고로 Audio route가 헤드폰인 경우는 매너 모드 전환이 감지되지 않습니다. 당연하겠죠. :)

 

 

아래와 같이 audio session을 초기화하고 listener를 등록하는 코드는 한 번만 해줘야겠죠?

// init

AudioSessionInitialize(NULL, NULL, NULL, NULL);

AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback,
self);

그리고 아래와 같이 listener에 등록한 콜백으로 매너 모드 전환을 알 수 있겠죠?
물론 audio session route 변경도 알 수 있습니다.

// call back
void audioRouteChangeListenerCallback(
                                      void *                  inClientData,
                                      AudioSessionPropertyID inID,
                                      UInt32                  inDataSize,
                                      const void *            inData);

void audioRouteChangeListenerCallback(
                                      void *                  inClientData,
                                      AudioSessionPropertyID inID,
                                      UInt32                  inDataSize,
                                      const void *            inData) {

    UInt32 routeSize = sizeof (CFStringRef);
    CFStringRef route;
    AudioSessionGetProperty (kAudioSessionProperty_AudioRoute, &routeSize, &route);

    NSLog(@"route: %@", route);

    if(CFStringGetLength(route) > 0)
        NSLog(@"Vibration Off");
    else
        NSLog(@"Vibration On");
}

Ref

http://stackoverflow.com/questions/7798891/detect-silent-mode-in-ios5

http://stackoverflow.com/questions/287543/how-to-programmatically-sense-the-iphone-mute-switch

  • Azuchan

    좋은 정보가 너무 많네요 ㅋㅋㅋ 잘 보고 갑니다 

  • http://alones.kr Gidae Yeo

    감사합니다!

  • no1tim

    ios5.0이후로 안되네요 ^^

  • 인현

    형, 연락처 바뀌셨나요?  안되시네. 
    연락 함 주세요~