美文网首页
近距离感应

近距离感应

作者: MaZuoYuan | 来源:发表于2015-12-29 20:01 被阅读109次

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


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

#import<AVFoundation/AVFoundation.h>

@interfaceViewController :UIViewController<AVAudioPlayerDelegate>

{

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];
}
}

相关文章

  • 近距离感应

    写在前面的话:近距离感应的测试需要真机测试,模拟器是无法打开近距离感应开关的,近距离感应的主要作用是在用户贴近耳朵...

  • 放生鸟前做的梦,有什么感应

    净空法师---别求感应,求感应永远没感应,有感应都是魔不是佛,为什么? 你不如法。什么才能感应?清净心才能感应。 ...

  • 你了解感应吗?《感應決定命運的力量》day1复盘

    ❤️“感应”,看到这个词,想到了感应开关,感应马桶,心灵感应……等等这些与我们生活息息相关的人事物。感应生命有什么...

  • 睁大你的眼第五季 暴力犯罪-骨肉分离法

    第15章 骨肉分离法 一号法医室的门,被丰越近距离经过时自动感应,瞬间打开。鱼贯而入的丰越、刘叶和冯不一人一声惊呼...

  • 这夏的捡拾

    散文诗/原创 有谁能比我幸运呢,来自远方的持续感应,有时如大地感应着天空,风儿感应着云朵,花儿感应着雨滴……必然联...

  • 感应

    其实我真的说不清感应是什么东西也许是一阵风在清晨醒来却发现花儿都开了开在了我不知道的时分也许是一缕幽香在不知不觉中...

  • 感应

    一条鱼你如果看它不顺眼它就会容易死去,看它好它就会一直存活,那么对于自己的孩子也是同样的道理,我们如果带着挑剔的眼...

  • 感应

    我站在门前,篱笆外。 几株从磨盘缝隙斜身而起的草,对着我。初秋的风里,它们缓缓地摇,枝头已经结籽。 它们对着东南的...

  • 感应

    独自漫无目的地行走在路上,黄昏的光经苍穹倒扣下来,灰白而羸弱,被我误解为暴雨来袭的噩兆,于是一边继续迷茫,一边不由...

  • 感应

    我在等待 洗衣机的工作 洗澡的时间里 隆隆的声音来自哪里? 隆隆隆,是大地郁闷的哀怨? 还是洗衣机的抱怨? 注意打...

网友评论

      本文标题:近距离感应

      本文链接:https://www.haomeiwen.com/subject/ehrihttx.html