美文网首页
iOS监听音频线路的改变

iOS监听音频线路的改变

作者: RainKill | 来源:发表于2017-03-07 00:57 被阅读0次

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

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

  • 注册一个线路改变的通知。AVAudioSessionRouteChangeNotification
  • 监听这个通知,获取前一个线路的设备。
  • 从通知处获取上一个设备的outputs属性,获取设备I/O接口,判断上一个设备的I/O接口点是不是耳机。
  • 调用delegateplaybackStopped方法停止音频输出。

代码一:

//注册线路改变的通知
        [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];
        }
    }
}

相关文章

  • iOS监听音频线路的改变

    为什么要监听音频线路的改变?,场景如下:当用户接入耳机时,声音按照耳机线路进行播放,当用户拔出耳机时,声音停止,这...

  • 在 OS X 中监听系统音量改变

    iOS中的音频监听 在iOS监听系统音量改变非常简单,只需要监听一个系统的通知就可以了. MacOSX中的音频监听...

  • iOS开发: 音频会话线路改变

    线路改变 在iOS设备上添加或移除音频输入、输出线路时, 会发生线路改变, 有多重原因会导致线路变化, 比如用户插...

  • 监听网络

    ios 注册通知、监听 iOS-OC-监听网络状态,有网时数据自动刷新 iOS实时监控网络状态的改变 简书 iOS...

  • IOS 监听文件改变

    NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocum...

  • Android 音频焦点控制(包含 原生 & WebView 音

    1 音频焦点管理类 2 注册监听 在使用的地方注册监听 3 使用 3.1 其他音频播放,停止当前音频 当失去焦点时...

  • 线程常驻内存

    iOS开发中,新创建的线程,执行完成后会销毁,如何让线程常驻内存 使用场景 随时监听某些状态改变,如监听网络状态

  • js随机切换背景音乐

    1.通过触发onended事件调用函数改变音频的src(地址)来达到切歌 2.通过设置监听事件

  • iOS监听RunLoop的状态改变

  • 音频焦点监听

    音频焦点监听,听着似乎是一个很高大上的名字。但其实呢,就是当自己的APP播放时,这里主要是能开后台Service...

网友评论

      本文标题:iOS监听音频线路的改变

      本文链接:https://www.haomeiwen.com/subject/xcepgttx.html