您的位置:首页 > 移动开发 > IOS开发

iOS - 设备扬声器听筒切换,静音模式播放音频

2017-02-08 18:25 387 查看
做社交产品时 , 语音聊天是必不可少的 , 如果公司不用三方框架比如环信或者融云什么的 , IM这块就得纯手动撸了.. 正如我们项目 … 做到后面细节部分 , 听筒和扬声器切换播放语音 , 静音模式下依然可以播放语音 , 此需要必不可少 . 网上查了很多 , 也没找到合适的 , 可能是自己写IM的公司还是比较少吧 ..后面想明白后 , 其实非常简单 , 就几句代码 … 距离传感器 + 声筒切换

一 : 注册距离传感通知

//1.一旦有物品靠近手机,离开手机时,都会发出通知。
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(sensorStateChange:) name:UIDeviceProximityStateDidChangeNotification object:nil];

//2.设置静音模式依然播放
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:YES error:nil];


二 : 初始化音频播放器

//初始化音频播放器
- (void)initPlayerWithPath:(NSString *)path
{
//创建音乐播放器 , 注意此处player需要强引用一下
self.player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
self.player.delegate = self;  //设置代理,监听音频播放结束
[self.player prepareToPlay];
}


三 : 点击播放音频

- (void)play
{
[UIDevice currentDevice].proximityMonitoringEnabled = YES; //播放前开启距离传感器
[self.player play];  //播放
}


四 : 移除通知,移除红外传感节省电

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
[[NSNotificationCenter defaultCenter]removeObserver:self name:UIDeviceProximityStateDidChangeNotification object:nil];  //移除通知
[UIDevice currentDevice].proximityMonitoringEnabled = NO; //关闭距离传感器,节省电
}


这样语音播放基本上和微信就差不多了.. 还是挺简单的..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios