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

时间:2012-04-25 18:56:28

标签: iphone ios avaudioplayer silent

我想在iPhone中以静音模式播放声音。

可以使用AVAudioPlayer(不使用AVAudioSession)来完成

(适用于ios 3.0 +)

提前致谢。

5 个答案:

答案 0 :(得分:27)

实际上,你可以这样做。它通过音频会话控制,与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年6月11日)

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

        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        NSError *error = nil;
        BOOL result = NO;
        if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) {
            result = [audioSession setActive:YES withOptions:0 error:&error]; // iOS6+
        } else {
            [audioSession setActive:YES withFlags:0 error:&error]; // iOS5 and below
        }
        if (!result && error) {
            // deal with the error
        }

        error = nil;
        result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];

        if (!result && error) {
            // deal with the error
        }

根据对此答案的最新评论,我认为我会将此作为替代方案发布。 : - )

答案 1 :(得分:23)

MarkGranoff's solution是正确的。但是,如果您更喜欢在Obj-c而不是C中执行此操作,则以下操作也适用:

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

答案 2 :(得分:4)

以上答案是正确的。以下是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)
}

答案 3 :(得分:1)

这只是诀窍(使用AVAudioSession

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

答案 4 :(得分:0)

Swift 4简单版本:

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