[[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; //建议在播放之前设置yes,播放结束设置NO,这个功能是开启红外感应 //添加监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sensorStateChange:) name:@"UIDeviceProximityStateDidChangeNotification" object:nil]; //处理监听触发事件 -(void)sensorStateChange:(NSNotificationCenter *)notification; { //如果此时手机靠近面部放在耳朵旁,那么声音将通过听筒输出,并将屏幕变暗(省电啊) if ([[UIDevice currentDevice] proximityState] == YES) { NSLog(@"Device is close to user"); [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; } else { NSLog(@"Device is not close to user"); [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; } } //初始化播放器的时候如下设置 UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride), &audioRouteOverride); AVAudioSession *audioSession = [AVAudioSession sharedInstance]; //默认情况下扬声器播放 [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; [audioSession setActive:YES error:nil];
To determine if proximity monitoring is available, attempt to enable it. If the value of the proximityState property remains NO, proximity monitoring is not available.
UIDeviceProximityStateDidChangeNotification,当近距离传感器状态改变时发生。
//添加近距离事件监听,添加前先设置为YES,如果设置完后还是NO的读话,说明当前设备没有近距离传感器 [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; if ([UIDevice currentDevice].proximityMonitoringEnabled == YES) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sensorStateChange:)name:UIDeviceProximityStateDidChangeNotification object:nil]; } //删除近距离事件监听 [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; if ([UIDevice currentDevice].proximityMonitoringEnabled == YES) { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceProximityStateDidChangeNotification object:nil]; } [[UIDevice currentDevice] setProximityMonitoringEnabled:NO]; #pragma mark - 处理近距离监听触发事件 -(void)sensorStateChange:(NSNotificationCenter *)notification; { //如果此时手机靠近面部放在耳朵旁,那么声音将通过听筒输出,并将屏幕变暗(省电啊) if ([[UIDevice currentDevice] proximityState] == YES)//黑屏 { NSLog(@"Device is close to user"); [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; } else//没黑屏幕 { NSLog(@"Device is not close to user"); [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; if (![MTool isPlayRecodering]) {//没有播放了,也没有在黑屏状态下,就可以把距离传感器关了 [[UIDevice currentDevice] setProximityMonitoringEnabled:NO]; } } }
UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressed:)]; [longPressGestureRecognizer setMinimumPressDuration:1.0f]; [longPressGestureRecognizer setAllowableMovement:50.0]; [self.bubbleBgImageView addGestureRecognizer:longPressGestureRecognizer]; [longPressGestureRecognizer release]; --------- -(void)longPressed:(UILongPressGestureRecognizer *) gestureRecognizer { switch (gestureRecognizer.state) { case UIGestureRecognizerStateEnded: break; case UIGestureRecognizerStateCancelled: break; case UIGestureRecognizerStateFailed: break; case UIGestureRecognizerStateBegan: if ([self.voiceDelegate respondsToSelector:@selector(BaseChartVoiceLongPressed)]) { [self.voiceDelegate BaseChartVoiceLongPressed]; } break; case UIGestureRecognizerStateChanged: break; default: break; } } ------------- #pragma mark BaseChartCellDelegate -(void)BaseChartVoiceLongPressed { NSLog(@"voice long Pressed"); if ([[[AVAudioSession sharedInstance] category] isEqualToString:AVAudioSessionCategoryPlayback]) { //切换为听筒播放 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; [self showTipInfo:@"切换为听筒模式"]; } else { //切换为扬声器播放 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [self showTipInfo:@"切换为扬声器模式"]; } }
原文:http://www.cnblogs.com/520gp-iOS/p/5264879.html