我正在制作一个音板应用程序,一切顺利,但我有一个问题,如果铃声关闭,声音就不会播放。
我试过这个:
[super viewDidLoad];
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: nil];
我正在使用AVFoundation Framework
播放按钮的代码是:
- (IBAction)queChin:(id)sender {
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"chin", CFSTR ("m4a"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);
}
我搜索了这个主题,但我找不到任何有效的答案。也许我错过了什么?
作为替代方案,我可以向用户发出警告,说“嘿,打开你的铃声”,但我不知道如何检测手机是否静音。
任何提示?
谢谢。
答案 0 :(得分:1)
好吧,我发现,即使你用这个初始化音频会话,你也不能用AudioServicesPlaySystemSound播放系统声音:
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: nil];
如果用户将设备静音,系统声音将保持静音。
我最终使用了AVAudioPlayer,解决了这个问题。
使用系统声音的旧代码:
- (IBAction)queChin:(id)sender {
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"chin", CFSTR ("m4a"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
CFRelease(soundFileURLRef);//prevents memory leak
AudioServicesPlaySystemSound(soundID);
}
使用AVAudioPlayer的新代码:
- (IBAction)queChin:(id)sender {
NSURL *url = [[NSBundle mainBundle] URLForResource:@"chin" withExtension:@"wav"];
_chingosound = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
_chingosound.delegate = self;
[_chingosound prepareToPlay];
[_chingosound play];
}
你必须初始化音频会话,以便在振铃器关闭的情况下播放声音。