iOS监听⽿机状态
最近在做⾳视频相关的开发,遇到的⼏个问题如下:
1.插⼊⽿机的时候并没有切换到⽿机播放仍然是扬声器播放
2.当⼀开始⼿机上已经插⼊⽿机时,这时候开启⾳频播放时仍然是扬声器播放
因此今天主要谈的就是从这两个问题:
先来解决第⼀个问题:其实解决⽿机插⼊时扬声器播放很明显我们需要获取⽿机插⼊的这个状态,通过什么来获取呢?通知,没错就是通过通知的
⽅式来获取,代码如下有需要的⾃取:
//⽿机状态获取的通知
[[NSNotificationCenterdefaultCenter]
addObrver:lf
lector:@lector(audioRouteChangeListenerCallback:)
name:AVAudioSessionRouteChangeNotification
object:[AVAudioSessionsharedInstance]];
/**
*监听⽿机插⼊拔出状态的改变
*@paramnotification通知
*/
-(void)audioRouteChangeListenerCallback:(NSNotification*)notification{
NSDictionary*interuptionDict=fo;
NSIntegerrouteChangeReason=[[interuptionDict
valueForKey:AVAudioSessionRouteChangeReasonKey]integerValue];
switch(routeChangeReason){
caAVAudioSessionRouteChangeReasonNewDeviceAvailable:
DLog(@"AVAudioSessionRouteChangeReasonNewDeviceAvailable");
//插⼊⽿机时关闭扬声器播放
[ittEnableSpeakerphone:NO];
break;
caAVAudioSessionRouteChangeReasonOldDeviceUnavailable:
DLog(@"AVAudioSessionRouteChangeReasonOldDeviceUnavailable");
//拔出⽿机时的处理为开启扬声器播放
[ittEnableSpeakerphone:YES];
break;
caAVAudioSessionRouteChangeReasonCategoryChange:
//calledatstart-alsowhenotheraudiowantstoplay
NSLog(@"AVAudioSessionRouteChangeReasonCategoryChange");
break;
}
}
第⼆个问题的解决:很明显再开启⾳视频之前,我们需要判断是否⼿机上已经插⼊了⽿机或者其他设备(这⾥单纯说⽿机),⽅法如下:
/**
*判断是否有⽿机
*
*@return判断是否有⽿机
*/
-(BOOL)hasHeadt{
AVAudioSession*audioSession=[AVAudioSessionsharedInstance];
AVAudioSessionRouteDescription*currentRoute=[audioSessioncurrentRoute];
for(AVAudioSessionPortDescription*s){
if([[outputportType]isEqualToString:AVAudioSessionPortHeadphones]){
returnYES;
}
}
returnNO;
}
我们通过这个⽅法来进⾏判断,如果开启⾳视频之前判断有⽿机设备,那么直接关闭扬声器播放,否则开启,这样就解决了我前⾯所说的两个问
题,希望可以帮到有需要的⼈,今天就说这么多吧,最近实在太忙了,过⼀阵⼦估计要做直播开发了,到时候分享⼀点直播开发的经验,敬请期待
本文发布于:2023-03-12 22:51:21,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678632683230755.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:监听耳机是什么.doc
本文 PDF 下载地址:监听耳机是什么.pdf
留言与评论(共有 0 条评论) |