【发布时间】:2011-03-04 18:19:54
【问题描述】:
我知道,我必须将AudioSession 设置为“播放”类别,即使在静音开关打开时也允许播放音频。我就是这样做的,但是打开开关时声音仍然会静音。
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);
编辑:顺便说一句,该应用程序是一个音板。播放声音是应用程序的唯一目的。以下是 Apple Doc 对此的评价:
将此类别用于应用程序 其音频播放是主要的 重要性。您的音频甚至可以播放 屏幕锁定并使用 响铃/静音开关设置为静音。
编辑 2:打开静音开关后,声音甚至无法通过耳机播放。 我知道用户为王。我知道静音开关有它的用途。那不是问题。我试图回答将AudioSession 类别设置为kAudioSessionCategory_MediaPlayback 并没有预期的结果。
编辑 3:按照 Jonathan 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);
【问题讨论】:
-
当用户将手机静音时播放声音似乎是完全恶意的。如果系统级别的东西不这样做,为什么你的应用程序应该这样做。除非你的应用是“核反应堆熔毁警告”,否则我认为没有理由允许你的应用用噪音打断会议、婚礼或葬礼。
-
来自 Apple Doc:“将此类别用于音频播放至关重要的应用程序。即使屏幕锁定且铃声/静音开关设置为静音,您的音频也会播放。”跨度>
-
那么对你来说什么是最重要的?我猜在一天结束的时候他们已经打开了你的应用程序,因为我忘记了你的应用程序在没有他们打开它的情况下无法执行操作,但即使他们将手机静音并且没有收到看似想要的行为的噪音,它仍然可以执行。
-
我会尊重用户的意愿。坐下来考虑一下,当我将电话静音时键盘发出噪音是不正确的行为。
-
在某些情况下,使用静音开关播放声音确实很好,Sam 的情况似乎就是其中之一。如果用户执行操作的目的是播放声音或音乐,那么无论静音开关是打开还是关闭都似乎完全没问题。这是 iPod 应用程序的行为。
标签: iphone audio audiosession