Мое приложение соответствует требованиям для использования UIBackgroundModes
, установленного в «Приложение воспроизводит звук».Мое приложение воспроизводит музыку из класса MPMusicPlayerController iPodMusicPlayer
.То, что я пытаюсь сделать, это позволить пользователю установить таймер для остановки музыки.У меня проблема с этим.Я реализовал фоновую задачу в методе applicationDidEnterBackground
следующим образом:
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
backgroundSupported = device.multitaskingSupported;
}
if (backgroundSupported) {
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid) {
if (rootController.sleepTimer != nil)
self.sustainTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkTimeRemaining) userInfo:nil repeats:YES];
}
});
});
}
}
с помощью метода checkTimeRemaining
:
-(void)checkTimeRemaining{
NSTimeInterval totalSeconds = rootController.timerSetInSeconds.doubleValue;
NSTimeInterval elapsedTime = [[NSDate date] timeIntervalSinceDate:rootController.startDateforSleepTimer];
NSTimeInterval remainingTime = totalSeconds - elapsedTime;
NSLog(@"remaining time %f",remainingTime);
if (remainingTime <= 0) {
[self.musicPlayer pause];
[sustainTimer invalidate];
self.sustainTimer = nil;
}
}
Я не получаю никаких ошибок, нотаймер не выходит за допустимые 10 минут.Так как я играю аудио (вместе с установленным фоновым режимом), я смогу остановить музыку в указанное время.Любые идеи о том, где я иду не так?
Спасибо