近距离感应

写在前面的话:近距离感应的测试需要真机测试,模拟器是无法打开近距离感应开关的,近距离感应的主要作用是在用户贴近耳朵或离开的同时切换话筒和听筒这两种模式的这样一个作用,使声音的播放更加贴近用户习惯。


一、首先在 .h 里引入头文件

#import

@interfaceViewController :UIViewController

{

AVAudioPlayer*avAudioPlayer;//播放器player

}

二、在.m里进行音频播放和打开近距离感应开关


//要确定近距离传感器是否可用,可以尝试启用它,即proximityMonitoringEnabled=YES,如果设置的属性值仍然为NO,说明传感器不可用。

//路径下读取音频文件

NSString*string =[[NSBundlemainBundle]pathForResource:@"你所使用的歌曲名"ofType:@"音频格式"];

NSLog(@"%@",string);

//把音频文件转化成URL格式

NSURL*url =[NSURLfileURLWithPath:string];

//初始化音频类并且添加播放文件

avAudioPlayer=[[AVAudioPlayeralloc]initWithContentsOfURL:urlerror:nil];

//设置代理

avAudioPlayer.delegate=self;

//设置初始音量大小

avAudioPlayer.volume=0.5;

//设置音乐播放次数-1为一直循环

avAudioPlayer.numberOfLoops=-1;

[avAudioPlayerplay];

//必须设置成这样才能确保话筒模式成功

//初始化播放器的时候如下设置

UInt32sessionCategory =kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory),&sessionCategory);
//audioRouteOverride覆盖音频线路
UInt32audioRouteOverride =kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,sizeof(audioRouteOverride),&audioRouteOverride);
AVAudioSession*audioSession = [AVAudioSessionsharedInstance];
//默认情况下扬声器播放
[audioSessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil];
[audioSessionsetActive:YESerror:nil];
//开启距离感应器
[UIDevicecurrentDevice].proximityMonitoringEnabled=YES;
//添加监听
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(proximityStateChange:)name:@"UIDeviceProximityStateDidChangeNotification"object:nil];
-(void)proximityStateChange:(NSNotificationCenter*)notification
{
//传感器已启动前提条件下,如果用户接近近距离传感器,此时属性值为YES,并且屏幕已关闭(非休眠)
if([[UIDevicecurrentDevice]proximityState]==YES) {
NSLog(@"Device is close to user");
//切换为听筒播放
[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlayAndRecorderror:nil];
}else
{
//切换为扬声器播放
[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror:nil];
NSLog(@"Decice is not close to user");
//[avAudioPlayer play];
}
}

你可能感兴趣的:(近距离感应)