2009-12-13 1 views
9

iPhone이 잠자기 상태로 돌아가서 잠자기 상태에서 돌아 왔음을 감지 할 수 있습니다 (applicationWillResignActive 및 applicationDidBecomeActive 사용). 그러나 그것이 어떤 종류의 방해인지 어떻게 알 수 있습니까? 오디오 플레이어 응용 프로그램을 만들고 있는데 iPhone을 잠자기 상태로 만들 때 오디오 재생을 유지해야합니다 (어떻게해야하는지 잘 압니다). 그러나 메시지, 알람 또는 배터리 부족 인터럽트가 발생하면 오디오를 중단해야합니다. 또한 이벤트가 끝나면 오디오를 다시 시작해야합니다.iPhone 유형 감지하기

어떻게 서로 다른 인터럽트를 구별합니까?

답변

5

정보는 아마도 앱에서 사용할 수 없지만 시도해 볼 항목은 다음과 같습니다. applicationWillResignActive:에서

  1. 는 어떤 힌트가있을 경우 확인하기 위해 NSNotification의 객체와 사용자 정보 속성을 확인.

  2. 등록은 기본 알림 센터에 게시 모든 알림을받을 수 있습니다 :

    아무것도가 게시 될 때 귀하의 메소드가 호출됩니다
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil]; 
    

. 알림 개체 및 userInfo 사전을 로깅하면 유용한 알림이 게시 될 것입니다. 하나를 찾으면 바로 등록 할 수 있습니다.

  1. 이것은 가장 해커이지만 메시지 또는 배터리 경고 인 경우 표시되는 경고에 액세스 할 수 있습니다. 알림은 앱의 기본 UIWindow를 통해 UIWindow에 표시됩니다. UIWindowDidBecomeVisibleNotification에 등록한 다음 창 하위 뷰를보고 경고 또는 다른 유용한 단서를 찾을 수 있는지 확인할 수 있습니다.

위의 모든 방법은 문서화되지 않은 동작을 통해 작동하며 앱 스토어에서 제출이 거부 될 수 있습니다. 그들 중 누구도 private 메소드 호출을 포함하지 않지만, 문서화되지 않은 통지 이름을 관찰하는 것이 private API로 간주된다고 주장 할 수 있습니다. 결국 애플의 의견 만이 중요 할 것이다.

필자는 개인적으로 시스템을 변경하는 경우 코드가 정상적으로 실패하는지 확인하려고 시도합니다.

+1

A와 B를 시도했지만 모두 비어 있습니다. 사용자 정보에 설명 또는 키 - 값 쌍이 없습니다. 어떤 것도 목표가 아닙니다. 그것의 이상한 사과가 그런 간단한 기능을 놓치지 않았다. C가 너무 해킹 된 것처럼 나에게 시도하지 않았습니다. – Prashant

+1

C : 앱에 표시되는 * 경고가 단순히 음악을 일시 중지할만한 이유라고 가정하면 문서화되지 않은 작업을하지 않을 것입니다. 해커가 될 경고 텍스트를 읽는 것은 뷰 계층을 파고들만합니다. – benzado