我的 iPhone 应用程序要求我知道用户何时插入/未插入耳机。这很容易。带有监听 kAudioSessionProperty_AudioRouteChange 的回调的 AudioSessionAddPropertyListener。
当事情发生时,我用 NSLog 写日志。用户插入耳机?在 gdb 控制台中获取通知和一行。用户拔下耳机?同上。
同时,我通过启动录音队列来感知环境的噪音水平。这也很有效:我可以很好地获取麦克风噪音水平并聆听音频路径的变化。
我发现在中断后,我重新激活了音频会话并将音频类别恢复为 kAudioSessionCategory_RecordAudio,音频路由通知有点混乱。
当我插入耳机时,我看不到任何通知。当我拔下耳机时,我会快速连续看到“插入”通知和“未插入”通知。
这就像“插入”通知延迟了,当“未插入”通知到达时,待处理通知的队列被刷新。
我究竟做错了什么?如何正确恢复音频会话以获取及时通知?
编辑:iPhone OS 3.1.2,在 iPhone 3G 上运行。我正在运行一个使用 3.0 SDK 编译的程序(来自 XCode 3.1.2)。