iOS 가 휴대 전화 음소 거 키 와 사 이 드 볼 륨 키 를 정확하게 감청 하 는 방법 예시

머리말
우리 의 앱 에는 이러한 Feature 가 있 습 니 다.사용자 가 볼 륨 키 를 통 해 최대 볼 륨 으로 조절 할 때 Toast 가 팝 업 됩 니 다.사용자 에 게 현재 볼 륨 이 가장 크다 는 것 을 알려 줍 니 다.볼 륨 키 를 계속 누 르 면 초대형 볼 륨 모드 로 설정 할 수 있 습 니 다(오디 오 파일 의 볼 륨 조절 을 통 해).처음에 우 리 는 앱 에서 감청 이름 이'AVSystemController'였 다.SystemVolumeDid Change Notification 의 시스템 알림 을 통 해 사용자 가 사 이 드 볼 륨 키 를 통 해 휴대 전화 볼 륨 을 조절 하 는 사건 을 알 수 있 습 니 다.

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onVolumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
이 알림 을 처리 하 는 방법 은 다음 과 같 습 니 다.

- (void)onVolumeChanged:(NSNotification *)notification {
 if ([[notification.userInfo objectForKey:@"AVSystemController_AudioCategoryNotificationParameter"] isEqualToString:@"Audio/Video"]) {
 if ([[notification.userInfo objectForKey:@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"] isEqualToString:@"ExplicitVolumeChange"]) {
  CGFloat volume = [[notification.userInfo objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
  if (volume != MAX_VOLUME) {
  // todo
  } else {
  // todo
  }
 }
 }
}
문제점 을 발견 하 다
이 코드 는 우리 앱 에서 줄곧 잘 작 동 하고 있다.하지만 최근 한동안 테스트 인원 이 버 전 을 컴 파일 해 볼 륨 을 최대 로 조절 한 뒤 Toast 알림 이 뜨 지 않 고 튀 어 나 오기 도 했다.디 버 깅 을 통 해 가끔'AVSystem Controller'를 들 을 수 있 습 니 다.SystemVolumeDid Change Notification 시스템 알림 은 가끔 없 을 때 도 있 고 흔 들 리 기도 합 니 다.한동안 모두 가 어떻게 된 일 인지 몰라 서 골 치가 아 팠 다.이 코드 는 이전에 발 표 된 정식 버 전에 서 이런 문제 가 발생 한 적 이 없 기 때문이다.
포 지 셔 닝 문제
이전 에는 버 전이 없 었 는데,현재 의 버 전 은 틀림없이 고 친 문제 라 는 것 을 설명 한다.체크 아웃 이 되 기 전의 commt 만 이 언제 제출 되 었 는 지 하나씩 테스트 합 니 다.하지만 이렇게 오 랜 시간 을 들 였 지만 언제 제출 했 는 지 알 아내 지 못 했다.마지막 으로 하루 를 괴 롭 혔 습 니 다.우리 쪽 의 한 미녀 동료 샤 론 은 마지막 으로 이 문 제 를 해 결 했 습 니 다.그녀 는 stackoverflow 에서 비슷 한 문 제 를 찾 았 습 니 다.우리 가 삭제 하기 전에 이어폰 라인 을 통 해 App 의 Feature 를 제어 할 때 이 코드 를 삭제 해서 생 긴 것 을 발 견 했 습 니 다.이 코드 는 원 격 제어 사건 을 감청 하기 시작 한 것 이다.

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
NSNotificationCenter 가 감청 한 알림"AVSystemControllerSystemVolumeDid Change Notification 이 Remote Control Events 와 관련 이 있다 니,이어폰 라인 에 도 볼 륨 조절 버튼 이 있 기 때 문 일 까??아 는 친구 가 있 으 면 댓 글 을 남 겨 서 소통 할 수 있 습 니 다.
ios 음소 거 키 를 어떻게 감청 합 니까?
음소 거 여 부 를 판단 합 니 다:

- (BOOL)isMuted 
{ 
 CFStringRef route; 
 UInt32 routeSize = sizeof(CFStringRef); 
 
 OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route); 
 if (status == kAudioSessionNoError) 
 { 
  if (route == NULL || !CFStringGetLength(route)) 
   return TRUE; 
 } 
 
 return FALSE; 
} 
음소 거 키 듣 기:

- (BOOL)addMutedListener 
{ 
 OSStatus s = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, 
             audioRouteChangeListenerCallback, 
             self); 
 return s == kAudioSessionNoError; 
} 
리 셋 함수:

void audioRouteChangeListenerCallback (void *inUserData, 
          AudioSessionPropertyID inPropertyID, 
          UInt32 inPropertyValueSize, 
          const void *inPropertyValue 
          ) 
{ 
 if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return; 
 BOOL muted = [mediaVolume isMuted]; 
 // add code here 
} 
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기