国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS正確監聽手機靜音鍵和側邊音量鍵的方法示例

2020-07-26 02:37:33
字體:
來源:轉載
供稿:網友

前言

我們的App有這樣一個Feature,用戶通過音量鍵調節到最大音量時,會彈出一個Toast,提示 用戶當前音量已經最大了,繼續按音量上鍵可以設置為超大音量模式(通過調節音頻文件的音量)。剛開始,我們在App中是監聽名稱為“AVSystemController_SystemVolumeDidChangeNotification”的系統通知來獲知用戶通過側邊音量鍵調節手機音量的事件。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onVolumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];

處理該通知的方法如下:

- (void)onVolumeChanged:(NSNotification *)notification { if ([[notification.userInfo objectForKey:@"AVSystemController_AudioCategoryNotificationParameter"] isEqualToString:@"Audio/Video"]) { if ([[notification.userInfo objectForKey:@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"] isEqualToString:@"ExplicitVolumeChange"]) {  CGFloat volume = [[notification.userInfo objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];  if (volume != MAX_VOLUME) {  // todo  } else {  // todo  } } }}

發現問題

這段代碼在我們這個App中工作的一直很好。但是最近一段時間,測試人員編譯版本,有時音量調節到最大后,沒有彈出Toast提示,而有時又會彈出來。經調試,發現有時候能監聽到“AVSystemController_SystemVolumeDidChangeNotification”系統通知,有時候又沒有,很飄忽不定。一時間大家都不知道怎么回事,很是頭疼。因為這個代碼在之前發布出去的正式版本中,從來沒有出現過這樣的問題。

定位問題

以前版本沒有,而現在的版本有,說明肯定是改出來的問題。只有checkout到之前的commit,逐一測試找出是哪次提交造成這樣的問題。但是這樣折騰了好久也沒能定位到是哪次提交造成的。最后,折騰了一天,我們這邊的一位美女同事Sharon最后解決了這個問題,她在stackoverflow上找到了類似的問題,發現是我們刪除之前通過耳機線控App的一個Feature時,把這段代碼刪掉了造成的。而這段代碼是開始監聽遠程控制事件。

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

NSNotificationCenter監聽的通知“AVSystemController_SystemVolumeDidChangeNotification”居然和RemoteControlEvents有關系,是因為耳機線上也有音量調節按鍵的原因???有知道的朋友們可以留言交流。

ios如何監聽靜音鍵

判斷是否靜音:

- (BOOL)isMuted {  CFStringRef route;  UInt32 routeSize = sizeof(CFStringRef);   OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route);  if (status == kAudioSessionNoError)  {   if (route == NULL || !CFStringGetLength(route))    return TRUE;  }   return FALSE; } 

監聽靜音鍵:

- (BOOL)addMutedListener {  OSStatus s = AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,              audioRouteChangeListenerCallback,              self);  return s == kAudioSessionNoError; } 

回調函數:

void audioRouteChangeListenerCallback (void *inUserData,           AudioSessionPropertyID inPropertyID,           UInt32 inPropertyValueSize,           const void *inPropertyValue           ) {  if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return;  BOOL muted = [mediaVolume isMuted];  // add code here } 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宾川县| 溆浦县| 大冶市| 温宿县| 西昌市| 福鼎市| 拉萨市| 松阳县| 吐鲁番市| 连山| 广饶县| 望谟县| 阳城县| 绍兴县| 杂多县| 习水县| 堆龙德庆县| 奉新县| 马龙县| 紫金县| 英山县| 玉屏| 聂荣县| 湄潭县| 古丈县| 阿拉善盟| 湘西| 安阳市| 克拉玛依市| 灵寿县| 丽水市| 太康县| 离岛区| 胶州市| 安化县| 古丈县| 大姚县| 兰西县| 措美县| 林甸县| 河源市|