我希望在iPhone的静音模式下播放声音。
是否可以使用 AVAudioPlayer(不使用 AVAudioSession)来实现?
(适用于iOS 3.0+版本)
提前致谢。
我希望在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播放音频,开启了静音开关后,我可以听到音频。
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) {
// 处理错误
}
error = nil;
result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
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)
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)")
}