今下午项目中使用到了 扬声器和听筒的设置,我项目中是这样的,有一个聊天设置,聊天设置有一个使用扬声器 播放声音的设置。
这个设置是,当你打开那个开关的话,你在聊天中都可以根据你的使用来任意的播放声音,今下午在网上查了一下,好多都是那几行代码,基本上都是复制同一个人的,搞的我拷贝他们的代码,竟然用不了,需要修改,我就进行了修改,运用到了我的项目中来,我的代码是这样的,我的代码中,有一个设置是判断那个开关是否打开,如果打开的状态我就是扩音器播放,没打开就是话筒播放,因为我开关是一个button按钮,所以我的判断是判断他 是0 或者 是1了。。
1 #pragma mark ----声音的播放 2 -(void)Playthevoice:(UIButton *)btn 3 { 4 self.voiceData=[NSData dataWithContentsOfFile:_wavfilePath]; 5 if ([self.delegate respondsToSelector:@selector(returnselfcell:)]) { 6 [self.delegate returnselfcell:self]; 7 } 8 9 NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults]; 10 NSString *isMessage=[userdefault objectForKey:@"isSpeaker_Set"]; 11 if ([isMessage isEqualToString:@"1"]) { 12 13 //初始化播放器的时候如下设置 14 UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 15 AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, 16 sizeof(sessionCategory), 17 &sessionCategory); 18 19 UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 20 AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, 21 sizeof (audioRouteOverride), 22 &audioRouteOverride); 23 24 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 25 //默认情况下扬声器播放 26 [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 27 [audioSession setActive:YES error:nil]; 28 29 [self SensorNotification:YES]; 30 31 }else if ([isMessage isEqualToString:@"0"]) 32 { 33 34 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 35 36 } 37 }
在下面我首先我先注册了一个监听的通知,这里我用了网上的方法,设置了如果你靠在耳朵上听的话,屏幕就会变暗,和拨打电话一样的处理,如果我的设置那里的布尔值为YES,则会来调用这个通知。这个通知就会来调用我的这个扩音器播放的这个方法。这个方法是我上面的 Playthevoice 方法里面的调用
[self SensorNotification:YES];
1 #pragma mark - 监听听筒or扬声器 2 - (void) SensorNotification:(BOOL)state 3 { 4 [[UIDevice currentDevice] setProximityMonitoringEnabled:state]; //建议在播放之前设置yes,播放结束设置NO,这个功能是开启红外感应 5 6 if(state)//添加监听 7 [[NSNotificationCenter defaultCenter] addObserver:self 8 selector:@selector(sensorVoiceStateChange:) name:@"UIDeviceProximityStateDidChangeNotification" 9 object:nil]; 10 else//移除监听 11 [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceProximityStateDidChangeNotification" object:nil]; 12 } 13 14 //处理监听触发事件 15 -(void)sensorVoiceStateChange:(NSNotificationCenter *)notification; 16 { 17 //如果此时手机靠近面部放在耳朵旁,那么声音将通过听筒输出,并将屏幕变暗(就为省一点电啊,可以让你勾搭妹纸了。哈哈) 18 if ([[UIDevice currentDevice] proximityState] == YES) 19 { 20 NSLog(@"Device is close to user"); 21 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 22 } 23 else 24 { 25 NSLog(@"Device is not close to user"); 26 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 27 } 28 }
基本上就是这些了,逻辑就是 你按钮那里触发了,扩音器播放,然后你的那个代理那里就会来执行这个扩音器播放的这个方法。然后根据你的这个判断来进行设置扩音器或者听筒了。。。