如何在iPhone中处于静音模式时使用AVAudioPlayer播放声音



我想在iPhone的静音模式下播放声音。

是否可以使用 AVAudioPlayer (不使用 AVAudioSession)

(适用于 iOS 3.0+)

提前谢谢。

实际上,你可以这样做。它通过音频会话进行控制,与AVAudioPlayer本身无关。为什么不想使用音频会话?他们在一起玩得很好...

在您的应用中,您应该初始化音频会话,然后您还可以告诉指示您要播放的音频类型。如果您是音乐播放器,那么即使启用了振铃/静音开关,用户也希望听到音频。

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
    AudioSessionSetActive(true);
    // Allow playback even if Ring/Silent switch is on mute
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                             sizeof(sessionCategory),&sessionCategory);

有一个应用程序,我做这件事,并使用AVAudioPlayer播放音频,启用铃声/静音开关,我可以听到音频。

更新 (11/6/2013)

在我上面提到的应用程序中,我成功使用了上面的代码,我(一段时间以来)一直在使用以下代码来获得相同的结果:

        AVAudioSession *audioSession = [AVAudioSession sharedInstance];        NSError *error = nil;        布尔值结果 = 否;        if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) {            结果 = [音频会话设置活动:是,选项:0错误:&错误];iOS6+        } else {            [音频会话设置活动:是,带标志:0错误:&错误];iOS5 及更低版本        }        if (!result && error) {            处理错误        }        错误 = 无;        结果 = [音频会话集类别:AVAudio会话类别播放错误:&错误];        if (!result && error) {            处理错误        }

我想我会根据对这个答案的最新评论发布这个作为替代方案。

MarkGranoff 的解决方案是正确的。但是,如果您更喜欢在 Obj-c 而不是 C 中执行此操作,则以下内容也可以:

    NSError *error = nil;
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
    [[AVAudioSession sharedInstance] setActive:YES error:&error];

上面的答案是正确的。以下是 Swift 版本。

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    //print("AVAudioSession Category Playback OK")
    do {
        try AVAudioSession.sharedInstance().setActive(true)
        //print("AVAudioSession is Active")
    } catch _ as NSError {
        //print(error.localizedDescription)
    }
} catch _ as NSError {
    //print(error.localizedDescription)
}

Swift 4 簡單版本:

try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])

这将简单地解决问题(使用 AVAudioSession

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)

最新更新