亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

峨山| 布尔津县| 旅游| 双鸭山市| 和平区| 庆元县| 汪清县| 都昌县| 宜丰县| 上虞市| 乌兰察布市| 乐山市| 彰化县| 个旧市| 连云港市| 南部县| 芜湖县| 聂荣县| 惠州市| 临泉县| 亚东县| 定日县| 新疆| 田阳县| 萝北县| 隆昌县| 凤凰县| 苍溪县| 若羌县| 青海省| 通渭县| 大渡口区| 清水河县| 上高县| 金平| 福贡县| 瑞昌市| 剑河县| 江山市| 大兴区| 白河县|