Я пишу приложение для будильника, которое работает, играя зацикливаемую тишину в фоновом режиме, пока не наступит время для срабатывания будильника, после чего он воспроизводит звуковой сигнал на петле до тех пор, пока пользователь открывает приложение. Вот мой код из applicationWillResignActive:Фоновый звук, работающий на симуляторе iOS, но не на устройстве
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask = 0;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"silence" ofType:@".wav"];
NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];
[player setNumberOfLoops:-1];
alarmTimer = [NSTimer scheduledTimerWithTimeInterval:timerInterval target:self selector:@selector(playAlarm) userInfo:nil repeats:NO];
[player prepareToPlay];
[player play];
здесь метод срабатывает по таймеру:
[player stop];
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Alarm" ofType:@".m4r"];
NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];
[player setNumberOfLoops:-1];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[player prepareToPlay];
[player play];
Это работает как задумано, когда я проверить его на тренажере. На моем iPhone метод таймера вызывает вызов, но звук не воспроизводится. Я добавил фоновый звук в свой файл plist. Чувствительность iPhone к названию аудиофайла не является проблемой, а переключатель отключения звука iPhone выключен. Спасибо за прочтение!
У вас есть пример кода, который я мог видеть? –