私の iPhone アプリケーションでは、ユーザーがいつヘッドフォンを接続したか、または接続していないかを知る必要があります。簡単だ。kAudioSessionProperty_AudioRouteChange をリッスンするコールバックを持つ AudioSessionAddPropertyListener。
何かが起こると、NSLog でログを書きます。ユーザーはヘッドフォンを接続しますか? 通知を受け取り、gdb コンソールに行を表示します。ユーザーはヘッドフォンを取り外しましたか? 同上。
同時に、録音オーディオ キューを開始して、環境のノイズ レベルを感知しています。これもうまく機能します。マイクのノイズ レベルを取得し、オーディオ ルートの変更を問題なく聞くことができます。
私が見つけたのは、中断した後、オーディオ セッションを再アクティブ化し、オーディオ カテゴリを kAudioSessionCategory_RecordAudio に復元したところ、オーディオ ルート通知が少しおかしくなったということです。
ヘッドフォンを接続しても、通知が表示されません。ヘッドフォンのプラグを抜くと、「プラグイン」通知と「プラグ抜き」通知の両方が立て続けに表示されます。
これは、「接続された」通知が遅れ、「接続されていない」通知が到着すると、保留中の通知のキューがフラッシュされるようなものです。
私は何を間違っていますか?時間のかかる通知を受け取るためにオーディオ セッションを正しく復元するにはどうすればよいですか?
編集: iPhone 3G で動作する iPhone OS 3.1.2。3.0 SDK (XCode 3.1.2 内から) でコンパイルされたプログラムを実行しています。