iOS :AudioSession详解 Category选择 听筒扬声器切换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS :AudioSession详解 Category选择 听筒扬声器切换相关的知识,希望对你有一定的参考价值。

参考技术A ——用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。注意:该Category无法在后台播放声音

——类似于AVAudiosessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。 这个category为默认category。该Category无法在后台播放声音

——用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。可在后台播放声音

———用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能。

——用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。

除了让用户手动选择,你也可以通过以下两种方法在程序里进行切换

方法1. 修改Category的默认行为:

方法2. OverrideOutputAudioPort: 方式

例如:解决项目中的bug:当 category是 PlayAndRecord 情况下:

IOS后台运行音频文件

技术分享

首先在配置文件中打开后台运行音频,如上图。

下一步在代码中添加

//设置后台播放

AVAudioSession *audioSession = [AVAudioSession sharedInstance];

    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

    [audioSession setActive:YES error:nil];

//添加远程控制事件

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

//播放录音, tempStr是项目中添加进来的音频文件名

    NSError *error;

    NSURL *tempURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle]pathForResource:tempStr ofType:@"mp3"]];

//创建一个全局播放器对象player,注意一定要是全局的对象,在这里初始化。

    _player = [[AVAudioPlayer alloc] initWithContentsOfURL:tempURL

                                                     error:&err];

//清空URL

    tempURL = nil;

    //对播放器属性进行设置

    _player.volume = 0.8;

    _player.currentTime = 0.0;

    _player.delegate = self;

    [_player prepareToPlay];

    

    [_player play];

//最后在dealloc中移除远程控制事件

 [[UIApplication sharedApplication] endReceivingRemoteControlEvents];

以上是关于iOS :AudioSession详解 Category选择 听筒扬声器切换的主要内容,如果未能解决你的问题,请参考以下文章

iOS MPVolumeView 基于 AudioSession Mode 中断

AudioSession/AudioCaptureSession的分析与使用

播放 youtube 视频后 iPhone 在 Play&Record 中恢复 AudioSession

AVAudioSession应用指南

IOS后台运行音频文件

iOS:在音频单元中动态更改采样率