我知道,我必须将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