我想在iPhone的静音模式下播放声音。是否可以使用AVAudioPlayer(不使用AVAudioSession)(For iOS 3.0+)先谢了。
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) }
pgccezyw2#
Swift 4简单版:
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
zujrkrfu3#
这将简单地完成任务(使用AVAudioSession)
AVAudioSession
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true)
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)") }
wwtsj6pe5#
实际上,你能做到的。它通过音频会话控制,与AVAudioPlayer本身无关。你为什么不想使用AudioSession?他们在一起玩得很好...在您的应用中,您应该初始化音频会话,然后您还可以告诉指示您打算播放的音频类型。如果你是一个音乐播放器,那么它的排序是有道理的,用户希望听到音频 * 即使与环/静音开关启用 *。
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; 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 }
我想我会把这个作为一个替代,根据最近对这个答案的评论。:-)
uyhoqukh6#
MarkGranoff's solution正确。但是,如果你更喜欢在Obj-c而不是C中执行,下面的方法也可以工作:
NSError *error = nil; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; [[AVAudioSession sharedInstance] setActive:YES error:&error];
6条答案
按热度按时间fcy6dtqo1#
以上答案都是正确的。以下是Swift版本。
pgccezyw2#
Swift 4简单版:
zujrkrfu3#
这将简单地完成任务(使用
AVAudioSession
)93ze6v8z4#
Swift 5:在AppDelegate内部使用LaunchingWithOptions
wwtsj6pe5#
实际上,你能做到的。它通过音频会话控制,与
AVAudioPlayer
本身无关。你为什么不想使用AudioSession?他们在一起玩得很好...在您的应用中,您应该初始化音频会话,然后您还可以告诉指示您打算播放的音频类型。如果你是一个音乐播放器,那么它的排序是有道理的,用户希望听到音频 * 即使与环/静音开关启用 *。
我有一个应用程序,我做这件事,并使用AVAudioPlayer播放音频,并与环/静音开关启用,我可以听到音频。
更新(11/6/2013)
在我上面提到的应用程序中,我成功地使用了上面的代码,我(一段时间以来)一直使用以下代码来实现相同的结果:
我想我会把这个作为一个替代,根据最近对这个答案的评论。:-)
uyhoqukh6#
MarkGranoff's solution正确。但是,如果你更喜欢在Obj-c而不是C中执行,下面的方法也可以工作: