目前我在iOS上开发应用程序,在AudioQueue
的帮助下记录音频文件。为了处理电话,闹钟等中断,我注册了notification
的回调:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioSessionDidChangeInterruptionType:)
name:AVAudioSessionInterruptionNotification object:self.session];
并妥善处理
- (void)audioSessionDidChangeInterruptionType:(NSNotification *)notification
{
AVAudioSessionInterruptionType interruptionType = (AVAudioSessionInterruptionType)[[[notification userInfo]
objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
if (AVAudioSessionInterruptionTypeBegan == interruptionType)
{
//handle beginning or interruption
}
else if (AVAudioSessionInterruptionTypeEnded == interruptionType)
{
//handle end or interruption
}
}
一切正常,只要用户接到电话,录音暂停,然后在完成电话后恢复。但有一个细微的细节打破了所有这一切。如果我在microphone
期间插入或插入phone call
,则不会恢复录制。它没有恢复,因为当我完成电话呼叫时,不会调用audioSessionDidChangeInterruptionType
方法AVAudioSessionInterruptionTypeEnded
。对于应用程序,中断永远不会结束。
我有一个想法,在中断开始时启动NSTimer
,如果电话已经完成,则每秒检查一次,但它有两个缺点:
你有没遇到过这个问题?如果是的话,你找到了办法吗?
我在iOS8上使用iPhone 5S。
答案 0 :(得分:0)
来自Apple iOS Human Interface Guidelines on Sound:
用户使用耳机和耳机私下听取声音并释放声音 他们的手。无论这些配件是否有线或 无线,用户对用户体验有特定的期望。
当用户插入耳机或耳机或连接无线时 音频设备,他们打算继续听当前的音频, 但是私下里。出于这个原因,他们期待一个当前的应用程序 播放音频以继续播放而不会暂停。
当用户拔下耳机或耳机时,或断开连接 无线设备(或设备超出范围或关闭),他们 不想自动分享他们一直在听的内容 其他。出于这个原因,他们期待一个正在播放的应用 音频暂停,允许它们明确重启时播放 他们准备好了。
鉴于你很难找到一个干净的解决方案。