我知道,我必須將AudioSession
設置爲「播放」類別,即使靜音開關打開時也允許使用音頻。這就是我所做的,但開關打開時,聲音仍會消失。PlaySystemSound與靜音開關
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle] pathForResource:soundString ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);
編輯:順便說一下,該應用程序是一個soundpad。播放聲音是應用程序的唯一目的。下面是蘋果文件說一下:
使用此類別的應用程序 其音頻播放是首要 重要性。即使 屏幕鎖定並且 鈴聲/靜音開關設置爲無聲,您的音頻也會播放。
編輯2:與靜音開關,聲音甚至不會通過耳機播放。 我知道用戶是王。我知道靜音開關有其目的。這不是問題。我試圖得到一個答案,將AudioSession
類別設置爲kAudioSessionCategory_MediaPlayback
沒有預期的結果。
編輯3:以下喬納森Watmough的建議下,我設置了AudioServices
kAudioServicesPropertyIsUISound
財產,但仍然沒有運氣。我錯過了什麼嗎?
// set the session property
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(sessionCategory), &sessionCategory);
// creates soundID
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle] pathForResource:soundString ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
// Jonathan Watmough suggestion
UInt32 flag = 0;
AudioServicesSetProperty(kAudioServicesPropertyIsUISound, sizeof(UInt32), &soundID, sizeof(UInt32), &flag);
AudioServicesPlaySystemSound (soundID);
顯得完全是惡意的,當用戶靜音自己的手機來播放聲音。如果系統級別的東西不這樣做,爲什麼你的應用程序。除非你的應用程序是「核反應堆崩潰警告」,否則我認爲沒有理由爲什麼應該允許你的應用程序中斷會議,婚禮或有噪音的葬禮。 – 2010-06-17 02:26:49
從Apple Doc:「將此類別用於音頻播放非常重要的應用程序。即使屏幕鎖定並且Ring/Silent開關設置爲無聲,您的音頻仍會播放。」 – samvermette 2010-06-17 02:28:41
那麼什麼歸類爲您的首要重要?我想在一天結束時他們已經打開你的應用程序,因爲我忘記了你的應用程序不能在沒有打開它的情況下執行操作,但即使它們的手機靜音並且聽不到任何似乎期望的行爲的噪聲,它仍然可以。 – 2010-06-17 02:31:48