iOS监听音频线路的改变

2017-03-07  本文已影响0人  RainKill

为什么要监听音频线路的改变?,场景如下:当用户接入耳机时,声音按照耳机线路进行播放,当用户拔出耳机时,声音停止,这是一个简单的需求,苹果文档建议这样操作,因为当用户拔出耳机的时候,应断定用户不需要外放功能(因为你不再听音乐了嘛,这其实是一个用户体验的问题。
注:公交车上正听着音乐,手机被偷了咋办?我朋友就被这样丢过手机,被偷了都不知道被谁偷的。ㄟ( ▔, ▔ )ㄏ如果你不想拔出耳机的时候自动静音那就不用看下面的文章了。

如何实现耳机拔出后自动静音功能?

代码一:

//注册线路改变的通知
        [nsnc addObserver:self
                 selector:@selector(handleRouteChange:)
                     name:AVAudioSessionRouteChangeNotification
                   object:[AVAudioSession sharedInstance]];

代码二:

- (void)handleRouteChange:(NSNotification *)notification {

    NSDictionary *info = notification.userInfo;
    AVAudioSessionRouteChangeReason reason = [info[AVAudioSessionRouteChangeReasonKey] intValue];
    
    if (reason == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {
        //获取前一个线路的设备
        AVAudioSessionRouteDescription *previousRoute = info[AVAudioSessionRouteChangePreviousRouteKey];
        //获取线路的音频接口类型
        AVAudioSessionPortDescription *previousOutput = previousRoute.outputs[0];
        //获取音频接口类型
        NSString *portType = previousOutput.portType;
        //如果是耳机接口
        if ([portType isEqualToString:AVAudioSessionPortHeadphones]) {
            //停止播放
            [self.delegate playbackStopped];
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读