按下home键后iPhone应用程序没有声音
Posted
技术标签:
【中文标题】按下home键后iPhone应用程序没有声音【英文标题】:No sound in iPhone app after pressing home button 【发布时间】:2011-12-11 14:43:51 【问题描述】:我的声音在模拟器中运行良好,但是当我在手机上运行应用程序时,在按下主页按钮然后返回应用程序后声音停止工作。这是在ios5中。我该如何解决这个问题? AVAudioPlayer 的委托似乎也停止了。应用不会崩溃。
NSString *path = [[NSBundle mainBundle]
pathForResource:@"Beep01" ofType:@"wav"];
clickSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:path] error:NULL];
clickSound.delegate = self;
[clickSound prepareToPlay];
后来我用[clickSound play]播放它;
【问题讨论】:
【参考方案1】:确保你有
#import <AVFoundation/AVFoundation.h>
在您的标题中。 然后在你的 AppDelegate 中你应该有这个方法:
- (AVAudioPlayer *) getSound: (NSString *) soundName
@try
AVAudioPlayer *sound = [[self getDictionary] objectForKey: soundName];
if (!sound)
NSError *error;
NSString *path = [[NSBundle mainBundle] pathForResource: soundName ofType: nil];
sound = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath: path]
error: &error];
if (!sound)
//NSLog(@"ERROR: Wrong sound format: %@. Description: %@", soundName, [error localizedDescription]);
else
sound.volume = 0.7;
//int len = sound.duration;
[[self getDictionary] setObject: sound forKey: soundName];
// NSLog(@"%@ loaded, duration: %i sec", soundName, len);
[sound release];
return sound;
@catch (id theException)
NSLog(@"ERROR: %@ not found!", soundName);
return nil;
- (NSMutableDictionary *) getDictionary
if (!dictionary) //Hashtable
dictionary = [[NSMutableDictionary alloc] init];
NSLog(@"new Dictionary");
return dictionary;
- (void) playSound: (NSString *) soundName
AVAudioPlayer *sound = [self getSound: soundName];
if (sound)
sound.currentTime = 0;
if (!sound.playing)
sound.numberOfLoops = 0;
[sound play];
- (void) stopSound: (NSString *) soundName
AVAudioPlayer *sound = [self getSound: soundName];
if (sound && sound.playing)
[sound stop];
在您的 AppDelegateDidFinishLaunching 中预加载您将使用的所有声音:
//pre-Load sounds
[self getSound: @"testSong.wav"];
在你的 - (void)play 方法中
YourAppDel *appDel = [UIApplication sharedApplication].delegate;
[appDel playSound:@"testSong.wav"];
享受
【讨论】:
谢谢。它并没有真正解决我的问题,但它是一个优雅的解决方案。我认为它与我同时运行的 AVAudioRecorder (某种 VU Meter)发生冲突。所以我将此作为解决方案,并将找出一个新问题。谢谢!【参考方案2】:当您的应用进入后台(或闹钟响起、手机接听电话或屏幕锁定)时,您的应用的音频会话会中断,并且您的音频播放器会暂停。处理此中断的推荐方法是在音频播放器的委托中实现AVAudioPlayerDelegate 方法– audioPlayerBeginInterruption:
和-audioPlayerEndInterruption:
。来自苹果的documentation:
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player
if (playing)
playing = NO;
interruptedOnPlayback = YES;
[self updateUserInterface];
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player
if (interruptedOnPlayback)
[player prepareToPlay];
[player play];
playing = YES;
interruptedOnPlayback = NO;
请注意,当调用-audioPlayerEndInterruption:
时,您会再次将-prepareToPlay
发送到您的音频播放器实例。如果您在中断后不调用它,您的音频会话可能不会为您重新启动,这会产生您上面描述的效果 - 神秘的死音频。
【讨论】:
以上是关于按下home键后iPhone应用程序没有声音的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 在 iPhone 网络应用程序中播放声音?
有谁能告诉我iphoneXR 玩音游的时候 老划到home键然后界面就出去了 怎么破