如何在iOS中暂停应用程序时调用方法/代码

时间:2014-11-29 22:59:14

标签: ios objective-c xcode

正如标题所示;我目前正在使用此代码播放声音文件:

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]

所有帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

您可以使用NSNotificationCenter收听视图控制器中的UIApplicationWillResignActiveNotificationUIApplicationDidBecomeActiveNotification通知(或上述代码所在的任何对象)以及暂停/恢复播放的声音

您可能无法在播放器上设置音量。打电话

可能会更好

[player pause][player play]

答案 1 :(得分:0)

有一个处理状态更改的协议:UIApplicationDelegate。您现在感兴趣的是willResignActivedidBecomeActive

请注意,这些不是didEnterBackgroundwillEnterForeground。不同之处在于前者会在应用程序接管时受到攻击,例如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];
}  

享受!