1、通道选择:
-(void)receive:(BOOL)isSpeaker{
NSLog(@"+++++speaker:%@",isSpeaker?@"YES":@"NO");
if (!isSpeaker) {
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
}else{//speaker
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
}
}
2、距离传感器感应选择:
#pragma mark --设置距离传感器
- (void)setproximity{
//添加近距离事件监听,添加前先设置为YES,如果设置完后还是NO的读话,说明当前设备没有近距离传感器
[[UIDevice currentDevice] setProximityMonitoringEnabled:YES];
if ([UIDevice currentDevice].proximityMonitoringEnabled) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sensorStateChange:) name:UIDeviceProximityStateDidChangeNotification object:nil];
}
}
//proximityState 属性 如果用户接近手机,此时属性值为YES,并且屏幕关闭(非休眠)。
-(void)sensorStateChange:(NSNotificationCenter *)notification{
if ([[UIDevice currentDevice] proximityState]) {
NSLog(@"Device is close to user");
//设置AVAudioSession 的播放模式
//[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
}else{
NSLog(@"Device is not close to user");
//[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
}
}
- (void)dealloc{
if ([UIDevice currentDevice].proximityMonitoringEnabled) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceProximityStateDidChangeNotification object:nil];
}
[[UIDevice currentDevice] setProximityMonitoringEnabled:NO];
}
本文介绍了如何在iOS应用中实现音频输出设备的切换及利用距离传感器自动调整音频播放方式的功能。通过调用AVAudioSession API可以实现扬声器与听筒之间的切换,同时使用UIDevice的proximityMonitoring特性来感知用户是否靠近设备,从而决定音频输出的方式。
2519

被折叠的 条评论
为什么被折叠?



