Apple表示拔下耳机后,iOS会自动停止播放。
虽然使用 AVPlayer 时确实如此,但在使用 AVAudioPlayer 时,它实际上无法正常工作,而是音频会继续从内置扬声器播放。
答案 0 :(得分:1)
我不确定,但试试这个:
- (void)viewDidLoad {
[super viewDidLoad];
NSError *setCategoryErr;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
// Detects when the audio route changes (ex: headphones unplugged)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioHardwareRouteChanged:) name:AVAudioSessionRouteChangeNotification object:nil];
// Don't forget to remove notification in dealloc method!!
}
- (void)audioHardwareRouteChanged:(NSNotification *)notification {
NSInteger routeChangeReason = [notification.userInfo[AVAudioSessionRouteChangeReasonKey] integerValue];
if (routeChangeReason == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {
// if we're here, The old device is unavailable == headphones have been unplugged, so stop manually!
[self.player stop];
}
}
答案 1 :(得分:1)
您需要观察硬件路径更改观察器并基于回调,您可以停止播放。
设置播放器 - 播放音频(即使在静音模式下)并静音其他音乐:
let audioSession = AVAudioSession.sharedInstance()
_ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
_ = try? audioSession.setActive(true)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(audioRouteChanged), name: .AVAudioSessionRouteChange, object: nil)
func audioRouteChanged(note: Notification) {
if let userInfo = note.userInfo {
if let reason = userInfo[AVAudioSessionRouteChangeReasonKey] as? Int {
if reason == AVAudioSessionRouteChangeReason.oldDeviceUnavailable.hashValue {
// headphones plugged out
player.stop()
}
}
}
}
重要说明:如果路径更改原因是AVAudioSessionRouteChangeReasonOldDeviceUnavailable,则媒体播放应用应暂停播放,但如果原因是AVAudioSessionRouteChangeReasonOverride则不应暂停播放。
答案 2 :(得分:1)
重要:如果路线更改原因为
AVAudioSessionRouteChangeReasonOldDeviceUnavailable
,则媒体播放应用应暂停播放,但如果原因为AVAudioSessionRouteChangeReasonOverride
则不应暂停播放。
"宜"可以表明任务的责任或可能性。 在这种情况下,这意味着当耳机等被拔掉并且不时,实施暂停是你的职责,它可能会在没有任何干预的情况下发生(因为你和已经看过了,它没有。
用新的眼光看待它,文档 含糊不清。应该不是一个好词选择。