Мое приложение iPhone требует, чтобы я знал, когда пользователь подключил / не подключил свои наушники. Это легко. AudioSessionAddPropertyListener с обратным вызовом, слушающим kAudioSessionProperty_AudioRouteChange.
Я пишу логи с NSLog, когда что-то происходит. Пользователь подключает наушники? Получите уведомление и строку в консоли gdb. Пользователь отключает наушники? То же самое.
В то же время я чувствую уровень шума в окружающей среде, начиная запись аудио-очереди. Это тоже прекрасно работает: я могу получить уровень шума микрофона и прослушивать изменения аудио маршрута.
Что я обнаружил, так это то, что после прерывания, и я снова активировал аудио сеанс и восстановил категорию аудио в kAudioSessionCategory_RecordAudio, уведомления о аудио маршруте становятся немного медленными.
Когда я подключаю наушники, я не вижу уведомления. Когда я отключаю наушники, я вижу ОБА «подключенное» уведомление И «отключенное» уведомление в быстрой последовательности.
Это похоже на задержку уведомления «подключен», а когда приходит уведомление «отключен», очередь ожидающих уведомлений сбрасывается.
Что я делаю не так? Как правильно восстановить аудио сеанс, чтобы получать своевременные уведомления?
РЕДАКТИРОВАТЬ: iPhone OS 3.1.2, работает на iPhone 3G. Я запускаю программу, скомпилированную с помощью 3.0 SDK (из XCode 3.1.2).