19

即使在 iPhone 的静音模式下,我也想播放声音。

是否可以通过使用 AVAudioPlayer 来完成(不使用 AVAudioSession)

(适用于 ios 3.0+)

提前致谢。

4

5 回答 5

31

实际上,您可以这样做。它通过 Audio Session 控制,与自身无关AVAudioPlayer。为什么不想使用 AudioSession?他们一起玩得很好...

在您的应用程序中,您应该初始化音频会话,然后您还可以指示您打算播放哪种音频。如果您是音乐播放器,那么即使启用了响铃/静音开关,用户也希望听到音频是有道理的。

    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 播放音频,并启用响铃/静音开关,我可以听到音频。

更新(2013 年 11 月 6 日)

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

        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        NSError *error = nil;
        布尔结果 = 否;
        if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) {
            结果 = [audioSession setActive:YES withOptions:0 error:&error]; // iOS6+
        } 别的 {
            [audioSession setActive:YES withFlags:0 error:&error]; // iOS5 及以下
        }
        如果(!结果 && 错误){
            // 处理错误
        }

        错误=无;
        结果 = [audioSession setCategory:AVAudioSessionCategoryPlayback 错误:&error];

        如果(!结果 && 错误){
            // 处理错误
        }

鉴于对此答案的最新评论,我想我会将其发布为替代方案。:-)

于 2012-04-25T19:44:34.603 回答
24

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

    NSError *error = nil;
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
    [[AVAudioSession sharedInstance] setActive:YES error:&error];
于 2012-10-13T00:35:09.270 回答
5

上面的答案是正确的。以下是 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)
}
于 2016-06-17T06:30:40.317 回答
2

Swift 4 简单版:

try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
于 2019-02-27T16:43:12.947 回答
1

这将简单地做到这一点(使用AVAudioSession

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
于 2018-02-13T08:34:45.443 回答