ios 如何在iPhone静音模式下使用AVAudioPlayer播放声音

mzsu5hc0  于 12个月前  发布在  iOS
关注(0)|答案(6)|浏览(133)

我想在iPhone的静音模式下播放声音。
是否可以使用AVAudioPlayer(不使用AVAudioSession)
(For iOS 3.0+)
先谢了。

fcy6dtqo

fcy6dtqo1#

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

pgccezyw2#

Swift 4简单版:

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

zujrkrfu3#

这将简单地完成任务(使用AVAudioSession

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

93ze6v8z4#

Swift 5:在AppDelegate内部使用LaunchingWithOptions

do {
                try AVAudioSession.sharedInstance().setCategory(.playback)
                try AVAudioSession.sharedInstance().setActive(true)
                
                // Allow playback even if Ring/Silent switch is on mute
                let sessionCategory = AVAudioSession.Category.playback.rawValue
                let defaultValue: AVAudioSession.Category = .ambient
                try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category(rawValue: sessionCategory) ?? defaultValue)
    
            } catch {
                print("AVAudioSession error: \(error.localizedDescription)")
                
            }
wwtsj6pe

wwtsj6pe5#

实际上,你能做到的。它通过音频会话控制,与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播放音频,并与环/静音开关启用,我可以听到音频。

更新(11/6/2013)

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

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
        }

我想我会把这个作为一个替代,根据最近对这个答案的评论。:-)

uyhoqukh

uyhoqukh6#

MarkGranoff's solution正确。但是,如果你更喜欢在Obj-c而不是C中执行,下面的方法也可以工作:

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

相关问题