带 MPMusicPlayerController 的睡眠定时器

Sleep Timer with MPMusicPlayerController

我正在开发一个 iOS 应用程序,它使用 MPMusicPlayerController 播放 iTunes 库中的音频。

是否可以创建一个计时器,在应用程序处于后台时 运行?我想实现一个睡眠定时器。 NSTimer 似乎是不可能的,或者更确切地说仅限于 3 分钟。我可以尝试其他选择吗?

目前,我的 App Delegate 中有这个。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback
                                     withOptions:AVAudioSessionCategoryOptionMixWithOthers
                                           error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    return YES;
}

NSTimer 完全没有问题。您不能在后台启动 计时器,但您当然可以使用一个。但当然你必须以其他方式在后台保持 运行。例如,如果我们进入后台时您已经在播放音乐,并且您已将应用配置为播放背景音乐,那么您将在后台保持 运行:音乐将继续播放,因此计时器, 如果我们进入后台时是运行,将继续运行。

要在使用 MPMusicPlayerController 时将应用 运行 保持在后台,您可以在后台播放静音。这可能是个坏主意...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback
                                     withOptions:AVAudioSessionCategoryOptionMixWithOthers
                                           error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    NSString* path = [[NSBundle mainBundle] pathForResource:@"silence" ofType:@"m4a"];
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:path] error:nil];
    self.player.numberOfLoops = -1;
    [self.player play];

    return YES;
}