中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-20 19:59:13 來源:腳本之家 閱讀:818 作者:Wellphone 欄目:移動開發

前言

我們的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 
} 

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

内乡县| 白山市| 呼伦贝尔市| 八宿县| 许昌县| 三都| 微山县| 静安区| 达孜县| 调兵山市| 平安县| 阳城县| 邵阳县| 乐山市| 阿瓦提县| 鞍山市| 闽清县| 建阳市| 荣昌县| 革吉县| 措美县| 宜宾市| 枣庄市| 信丰县| 溧阳市| 广宗县| 武功县| 罗江县| 青田县| 石嘴山市| 宣汉县| 牡丹江市| 临城县| 太和县| 石阡县| 长子县| 凤台县| 香格里拉县| 临西县| 嘉定区| 长丰县|