即使在静音模式下也能在 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 上播放声音 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

iPhone处于静音模式时不播放声音

即使 iPhone 处于静音状态,AVAudioPlayer 仍在播放环境声音

在静音模式下播放声音,应用程序终止状态

iPhone静音时如何播放声音?

即使手机处于静音或振动状态,如何让视频播放声音? [复制]

静音模式下的 UILocalNotification 声音