正如标题所示;我目前正在使用此代码播放声音文件:
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@".mp3"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath:soundFilePath])
{
// Your code to play the sound file
[player setVolume:1.0];
player.numberOfLoops = 5; //infinite
[player play];
}
但是,当您暂停应用程序时,音乐会继续播放(按主页按钮)。如何在暂停应用时调用[player setVolume:0.0]
,在恢复应用时如何调用[player setVolume:1.0]
?
所有帮助表示赞赏。
答案 0 :(得分:1)
您可以使用NSNotificationCenter
收听视图控制器中的UIApplicationWillResignActiveNotification
和UIApplicationDidBecomeActiveNotification
通知(或上述代码所在的任何对象)以及暂停/恢复播放的声音
您可能无法在播放器上设置音量。打电话
可能会更好 [player pause]
和[player play]
答案 1 :(得分:0)
有一个处理状态更改的协议:UIApplicationDelegate
。您现在感兴趣的是willResignActive
和didBecomeActive
。
请注意,这些不是didEnterBackground
和willEnterForeground
。不同之处在于前者会在应用程序接管时受到攻击,例如Siri,而后者则不会。
您可以在音频管理器类中实现此协议,并在此时设置音量,如下所示:
- (void)applicationWillResignActive:(UIApplication *)application {
self.currentVolume = self.player.volume;
self.player.volume = 0;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
self.player.volume = self.currentVolume;
}
可能没有必要存储当前的卷,但是现在可以像现在这样设计它将允许您在将来实现它。
您应该考虑是否要将播放器静音或暂停播放器。我确信你有,但一般的更好的做法就是暂停它,而不是将其静音,但这不适用于所有情况。
此外,你应该知道一些程序员认为只有AppDelegate才能实现UIApplicationDelegate协议。对于它有一些很好的论据,而且就个人而言,我并没有真正决定它的最佳实践,但是如果你想遵循它,那么你可以设置一个协议在AppDelegate中委托这些并让您的音频管理器实现 委托,或者您可以使用NSNotificationCenter将事件广播给任何侦听器 - 因此,在这种情况下,您的音频管理器。在这两个中,我会说使用通知是一种更清晰的方式来处理它(委托代表对我来说有点傻),但如果你不小心它们也会变得混乱。
答案 2 :(得分:0)
这里是我添加到viewDidLoad的代码,用于调用应用暂停的方法:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(muteMusic)
name:UIApplicationWillResignActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(activateMusic)
name:UIApplicationDidBecomeActiveNotification object:nil];
然后,当然,我的两种方法:
- (void) muteMusic {
[player pause];
}
- (void) activateMusic {
[player play];
}
享受!