亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS正確監(jiān)聽(tīng)手機(jī)靜音鍵和側(cè)邊音量鍵的方法示例

 更新時(shí)間:2017年11月16日 10:31:54   作者:Wellphone  
這篇文章主要給大家介紹了關(guān)于iOS正確監(jiān)聽(tīng)手機(jī)側(cè)邊音量鍵的相關(guān)資料,并且給大家分享了ios監(jiān)聽(tīng)靜音鍵的示例代碼,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。

前言

我們的App有這樣一個(gè)Feature,用戶(hù)通過(guò)音量鍵調(diào)節(jié)到最大音量時(shí),會(huì)彈出一個(gè)Toast,提示 用戶(hù)當(dāng)前音量已經(jīng)最大了,繼續(xù)按音量上鍵可以設(shè)置為超大音量模式(通過(guò)調(diào)節(jié)音頻文件的音量)。剛開(kāi)始,我們?cè)贏(yíng)pp中是監(jiān)聽(tīng)名稱(chēng)為“AVSystemController_SystemVolumeDidChangeNotification”的系統(tǒng)通知來(lái)獲知用戶(hù)通過(guò)側(cè)邊音量鍵調(diào)節(jié)手機(jī)音量的事件。

 [[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
  }
 }
 }
}

發(fā)現(xiàn)問(wèn)題

這段代碼在我們這個(gè)App中工作的一直很好。但是最近一段時(shí)間,測(cè)試人員編譯版本,有時(shí)音量調(diào)節(jié)到最大后,沒(méi)有彈出Toast提示,而有時(shí)又會(huì)彈出來(lái)。經(jīng)調(diào)試,發(fā)現(xiàn)有時(shí)候能監(jiān)聽(tīng)到“AVSystemController_SystemVolumeDidChangeNotification”系統(tǒng)通知,有時(shí)候又沒(méi)有,很飄忽不定。一時(shí)間大家都不知道怎么回事,很是頭疼。因?yàn)檫@個(gè)代碼在之前發(fā)布出去的正式版本中,從來(lái)沒(méi)有出現(xiàn)過(guò)這樣的問(wèn)題。

定位問(wèn)題

以前版本沒(méi)有,而現(xiàn)在的版本有,說(shuō)明肯定是改出來(lái)的問(wèn)題。只有checkout到之前的commit,逐一測(cè)試找出是哪次提交造成這樣的問(wèn)題。但是這樣折騰了好久也沒(méi)能定位到是哪次提交造成的。最后,折騰了一天,我們這邊的一位美女同事Sharon最后解決了這個(gè)問(wèn)題,她在stackoverflow上找到了類(lèi)似的問(wèn)題,發(fā)現(xiàn)是我們刪除之前通過(guò)耳機(jī)線(xiàn)控App的一個(gè)Feature時(shí),把這段代碼刪掉了造成的。而這段代碼是開(kāi)始監(jiān)聽(tīng)遠(yuǎn)程控制事件。

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

NSNotificationCenter監(jiān)聽(tīng)的通知“AVSystemController_SystemVolumeDidChangeNotification”居然和RemoteControlEvents有關(guān)系,是因?yàn)槎鷻C(jī)線(xiàn)上也有音量調(diào)節(jié)按鍵的原因???有知道的朋友們可以留言交流。

ios如何監(jiān)聽(tīng)靜音鍵

判斷是否靜音:

- (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; 
} 

監(jiān)聽(tīng)靜音鍵:

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

回調(diào)函數(shù):

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • iOS源碼閱讀必備知識(shí)之Tagged Pointer

    iOS源碼閱讀必備知識(shí)之Tagged Pointer

    這篇文章主要給大家介紹了關(guān)于iOS源碼閱讀必備知識(shí)之Tagged Pointer的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • IOS中UIWebView加載Loading的實(shí)現(xiàn)方法

    IOS中UIWebView加載Loading的實(shí)現(xiàn)方法

    最近有朋友問(wèn)我類(lèi)似微信語(yǔ)音播放的喇叭動(dòng)畫(huà)和界面圖片加載loading界面是怎樣實(shí)現(xiàn)的,是不是就是一個(gè)gif圖片呢!我的回答當(dāng)然是否定了,當(dāng)然不排除也有人用gif圖片?。?/div> 2015-05-05
  • iOS開(kāi)發(fā) 正則運(yùn)算詳細(xì)介紹

    iOS開(kāi)發(fā) 正則運(yùn)算詳細(xì)介紹

    這篇文章主要介紹了iOS開(kāi)發(fā) 正則運(yùn)算的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • IOS 中UIApplication詳解及實(shí)例

    IOS 中UIApplication詳解及實(shí)例

    這篇文章主要介紹了IOS 中UIApplication詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • IOS 開(kāi)發(fā)之PickerView自定義視圖的實(shí)例詳解

    IOS 開(kāi)發(fā)之PickerView自定義視圖的實(shí)例詳解

    這篇文章主要介紹了IOS 開(kāi)發(fā)之PickerView自定義視圖的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分知識(shí),需要的朋友可以參考下
    2017-08-08
  • iOS中表單列表樣式鍵盤(pán)遮擋的解決方案

    iOS中表單列表樣式鍵盤(pán)遮擋的解決方案

    這篇文章主要給大家介紹了關(guān)于iOS中表單列表樣式鍵盤(pán)遮擋的解決方案,文中通過(guò)示例代碼將解決的方法一步步介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2019-01-01
  • iOS實(shí)現(xiàn)文件切片儲(chǔ)存并且上傳(仿斷點(diǎn)續(xù)傳機(jī)制)

    iOS實(shí)現(xiàn)文件切片儲(chǔ)存并且上傳(仿斷點(diǎn)續(xù)傳機(jī)制)

    這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)文件切片儲(chǔ)存并上傳仿斷點(diǎn)續(xù)傳機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • KVO實(shí)現(xiàn)自定義文件復(fù)制進(jìn)度效果

    KVO實(shí)現(xiàn)自定義文件復(fù)制進(jìn)度效果

    這篇文章主要為大家詳細(xì)介紹了KVO實(shí)現(xiàn)自定義文件復(fù)制進(jìn)度效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • iOS開(kāi)發(fā)中CAlayer層的屬性以及自定義層的方法

    iOS開(kāi)發(fā)中CAlayer層的屬性以及自定義層的方法

    這篇文章主要介紹了iOS開(kāi)發(fā)中CAlayer層的屬性以及自定義層的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-11-11
  • iOS下Safari點(diǎn)擊事件失效的解決方法

    iOS下Safari點(diǎn)擊事件失效的解決方法

    這篇文章主要給大家介紹了關(guān)于在iOS下Safari點(diǎn)擊事件失效的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評(píng)論