Я занимаюсь разработкой музыкального приложения, в котором оно должно работать в фоновом режиме.
То есть, когда пользователь выбрал файл для воспроизведения и нажал кнопку «Домой»
тогда файл должен продолжать играть в фоновом режиме.
Я использую AVAudioPlayer.
Я пробовал это:
**AppDelegate.m**
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIApplication* app = [UIApplication sharedApplication];
NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil);
bgTask = [app beginBackgroundTaskWithExpirationHandler: ^{
dispatch_async(dispatch_get_main_queue(), ^{
[app endBackgroundTask:self->bgTask];
self->bgTask = UIBackgroundTaskInvalid;
});
}];
dispatch_async(dispatch_get_main_queue(), ^{
self->bgTask = UIBackgroundTaskInvalid;
});
}
**Player.m**
- (void) viewDidAppear:(BOOL)animated {
NSLog(@"viewDidAppear");
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
-(BOOL)canBecomeFirstResponder{
NSLog(@"canBecomeFirstResponder");
return YES;
}
-(void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
[super viewWillDisappear:animated];
}
- (void)remoteControlReceivedWithEvent:(UIEvent*)receivedEvent{
NSLog(@"remoteControlReceivedWithEvent");
if (receivedEvent.type == UIEventTypeRemoteControl){
switch (receivedEvent.subtype){
case UIEventSubtypeRemoteControlTogglePlayPause:
NSLog(@"UIEventSubtypeRemoteControlTogglePlayPause");
break;
case UIEventSubtypeRemoteControlPreviousTrack:
NSLog(@"UIEventSubtypeRemoteControlPreviousTrack");
break;
case UIEventSubtypeRemoteControlNextTrack:
break;
default:
break;
}
}
}