iOS正确监听手机静音键和侧边音量键的方法示例

  


  

  

我们的应用有这样一个特性,用户通过音量键调节到最大音量时,会弹出一个吐司,提示用户当前音量已经最大了,继续按音量上键可以设置为超大音量模式(通过调节音频文件的音量)。刚开始,我们在应用中是监听名称为“AVSystemController_SystemVolumeDidChangeNotification”的系统通知来获知用户通过侧边音量键调节手机音量的事件。

        [[NSNotificationCenter defaultCenter] addObserver:自我选择器:@ selector (onVolumeChanged:)名称:@“AVSystemController_SystemVolumeDidChangeNotification”对象:nil);      

处理该通知的方法如下:

        - (void) onVolumeChanged: {(NSNotification *)通知   如果([[通知。用户信息objectForKey: @ " AVSystemController_AudioCategoryNotificationParameter "] isEqualToString: @“音频/视频”)){   如果([[通知。用户信息objectForKey: @ " AVSystemController_AudioVolumeChangeReasonNotificationParameter "] isEqualToString: @ ExplicitVolumeChange)) {   CGFloat体积=[[通知。用户信息objectForKey: @“AVSystemController_AudioVolumeNotificationParameter”] floatValue];   如果(体积!=MAX_VOLUME) {//todo   其他}{//todo   }   }   }   }      


  

  

这段代码在我们这个应用中工作的一直很好。但是最近一段时间,测试人员编译版本,有时音量调节到最大后,没有弹出烤面包提示,而有时又会弹出来。经调试,发现有时候能监听到“AVSystemController_SystemVolumeDidChangeNotification”系统通知,有时候又没有,很飘忽不定。一时间大家都不知道怎么回的事,很是头疼,因为这个代码在之前发布出去的正式版本中,从来没有出现过这样的问题。

  


  

  

以前版本没有,而现在的版本有,说明肯定是改出来的问题。只有付款到之前的承诺,逐一测试找出是哪次提交造成这样的问题。但是这样折腾了好久也没能定位到是哪次提交造成的。最后,折腾了一天,我们这边的一位美女同事沙龙最后解决了这个问题,她在stackoverflow上找到了类似的问题,发现是我们删除之前通过耳机线控应用程序的一个功能时,把这段代码删掉了造成的。而这段代码是开始监听远程控制事件。

        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];      

NSNotificationCenter监听的通知“AVSystemController_SystemVolumeDidChangeNotification”居然和RemoteControlEvents有关系,是因为耳机线上也有音量调节按键的原因? ? ?有知道的朋友们可以留言交流。

  

  

<>强判断是否静音:

        (保龄球)isMuted   {   CFStringRef路线;   UInt32 routeSize=sizeof (CFStringRef);      OSStatus状态=AudioSessionGetProperty (kAudioSessionProperty_AudioRoute, routeSize,和路线);   如果状态==kAudioSessionNoError)   {   如果(路线==NULL | | ! CFStringGetLength(路线))   返回TRUE;   }      返回错误;   }      

<>强监听静音键:

        (保龄球)addMutedListener   {   OSStatus s=AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange   audioRouteChangeListenerCallback,   自我);   返回s==kAudioSessionNoError;   }      

<强>回调函数:

        空白audioRouteChangeListenerCallback (void * inUserData,   AudioSessionPropertyID inPropertyID,   UInt32 inPropertyValueSize,   const void * inPropertyValue   )   {   如果(inPropertyID !=kAudioSessionProperty_AudioRouteChange)返回;   BOOL沉默=[mediaVolume isMuted];//添加代码   }      

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

iOS正确监听手机静音键和侧边音量键的方法示例