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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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; //关闭距离传感器,节省电
}

这样语音播放基本上和微信就差不多了.. 还是挺简单的..

猜你喜欢

转载自blog.csdn.net/coderMy/article/details/54930525