即使在静音模式下也能在 iPhone 上播放声音 [重复]
Posted
技术标签:
【中文标题】即使在静音模式下也能在 iPhone 上播放声音 [重复]【英文标题】:Play sound on iPhone even in silent mode [duplicate] 【发布时间】:2010-09-18 05:38:20 【问题描述】:我想制作一个应用程序,它可以在 iPhone 处于静音模式时创建声音、音乐或系统声音。在静音模式下是否可以播放任何类型的声音,无论是音乐还是系统音?
【问题讨论】:
如果我是用户,我会被那个“功能”提示...毕竟,将手机置于静音模式的用户可能希望手机保持安静。 我以为静音模式的目的是让手机保持静音? @pankaj 在这种情况下,您是否尝试过相反的方法:将所有“不重要”的呼叫静音?这可能更可行。 我想谈谈为什么这是非常好的用户体验(如果没有被滥用)。简单的示例是警报应用程序和用户显式播放视频的应用程序。与应用程序进行物理通信是很烦人的,它应该向您呈现视频,只是为了回忆您已将设备静音。静音用于消除计划外的干扰,例如电话、短信和其他警报。将其等同于断开扬声器是没有帮助的......尤其是当您可以简单地将音量设置为零来实现这一点时。 我想和 ctrahey 一起去这里;我正在制作一个广播应用程序,如果用户按下“播放”,他希望声音出来。我不希望他必须取消手机静音才能收听广播。最重要的是,他不会被计划外的声音打扰。我认为这是完全可以接受的,反对@WilliamNiu 所说的 【参考方案1】:这是不可取的,但我能说你做不到。您可能有充分的理由播放声音。
如果您使用的是音频会话,请在文件开头包含 <AVFoundation/AVFoundation.h>
并
[[AVAudiosession sharedInstance]
setCategory: AVAudioSessionCategoryPlayback
error: nil];
应该可以解决问题。请注意,如果您播放音乐或声音,则 iPod 播放将暂停。
完成此操作后,可能在您播放声音的某个类的初始化中某处,您可以像这样实例化声音:
// probably an instance variable: AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url];
完成后,您可以随时使用它:
[player play]; // Play the sound
[player pause]; // Pause the sound halfway through playing
player.currentTime += 10 // skip forward 10 seconds
player.duration // Get the duration
还有其他好东西。查找AVAudioPlayer 类参考。
【讨论】:
有什么代码可以在静音模式下播放声音 大家好,首先感谢cool_me5000 的回答。在我的情况下,当应用程序在后台(音量最小)时声音会响起,但如果应用程序在前台(音量最小),声音不会响起。我正在测试 iPod touch 4 代(我这么说是因为它没有静音开关)。你知道我可以改变什么来实现应用在这两种情况下的声音吗? 万一你到这里了,因为这个解决方案不能在 iPad 上运行,而只能在 iPhone 上运行:我在设置AVAudioSession
类别时遇到了这个问题,然后再呈现 AVPlayerViewController
。如果我在 presentViewController
调用的完成块中设置类别(并且在实际调用 play()
之前)它在两个设备系列上都可以正常工作。【参考方案2】:
对于 Swift 2、3、4.2
do
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
catch
print(error)
【讨论】:
【参考方案3】:是的,您可以在手机设置为振动时播放声音。 只需使用 AVAudioPlayer 类。
默认情况下,播放音频会话 声音将~不~尊重设置 iPhone 上的静音开关。在 换句话说,如果你打电话给 播放声音和静音(硬件) 打开 iPhone 设置为静音, 你仍然会听到声音。
这就是你想要的。所以现在您知道在手机处于静音模式时播放音频会话仍会播放声音,您只需要知道如何创建音频会话来播放声音,如下所示: 取自本网站:http://iosdevelopertips.com/audio/playing-short-sounds-audio-session-services.html
SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle]
pathForResource:@"RapidFire" ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);
为此,您需要导入头文件,并将 AudioToolbox.framework 添加到您的项目中。
就是这样。
因此,从这个答案中,您现在知道您可以在手机振动时播放声音。 您不需要额外的或特殊的代码来允许您执行此功能,因为默认情况下它已经执行此操作。
PK
【讨论】:
不适用于 iOS9 有人在 iOS 9 上找到了解决方案吗? 请介绍一下 iOS9 的解决方案? 这在 iOS9+ 上不起作用你找到解决办法了吗? 我目前还没有答案,因为我还没有需要这样做。另外,这个问题已有 6 年历史,如果有人对 iOS 9 有答案,请随时编辑。【参考方案4】:适用于 iOS 6 及更高版本
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
【讨论】:
在斯威夫特do try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true) catch let error as NSError // report error
【参考方案5】:
把这个放在你的viewDidLoad
:
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory), &sessionCategory);
【讨论】:
【参考方案6】:要在静音模式下播放声音,即使它进入后台,试试这个:
将此代码放入应用程序:didFinishLaunchingWithOpitons:
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
和 applicationDidEnterBackground 中的这段代码:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
还设置了播放音频/空中播放的背景模式并包含 AVFoundation 标头。
【讨论】:
【参考方案7】:对于 Objective C,您可以使用以下代码播放系统声音:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
*The system path could be modified.*
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf";
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];
【讨论】:
【参考方案8】:Swift - 在播放音频/视频之前调用此函数以在手机处于静音状态时强制播放。这也会使当前正在播放的其他音频静音。
如果您不想让其他音频静音,可以将.duckOthers
更改为.mixWithOthers
。
func setupAudio()
let audioSession = AVAudioSession.sharedInstance()
_ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
_ = try? audioSession.setActive(true)
【讨论】:
以上是关于即使在静音模式下也能在 iPhone 上播放声音 [重复]的主要内容,如果未能解决你的问题,请参考以下文章