版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coderMy/article/details/54930525
做社交产品时 , 语音聊天是必不可少的 , 如果公司不用三方框架比如环信或者融云什么的 , 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; //关闭距离传感器,节省电
}
这样语音播放基本上和微信就差不多了.. 还是挺简单的..