Ze zdziwieniem mogę powiedzieć, że cel ten można osiągnąć, a ja po prostu to zrobił.
sposób obsługuje wszystkie możliwości:
- Ekran zablokowany przez użytkownika;
- Przycisk Home wciśnięty;
- Przełącz na inną aplikację.
Dopóki wystąpienie AVPlayer
z systemem iOS uniemożliwia automatyczne blokowanie urządzenia.
Najpierw należy skonfigurować aplikację, aby obsługiwała tło dźwiękowe z pliku Info.plist, dodając w tablicy UIBackgroundModes
element audio
.
Następnie umieścić w swoim AppDelegate.m do - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:
tych metod
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
i #import <AVFoundation/AVFoundation.h>
Następnie w kontroler widoku, który kontroluje AVPlayer
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
i
- (void)viewWillDisappear:(BOOL)animated
{
[mPlayer pause];
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
następnie odpowiedzieć na
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
if([mPlayer rate] == 0){
[mPlayer play];
} else {
[mPlayer pause];
}
break;
case UIEventSubtypeRemoteControlPlay:
[mPlayer play];
break;
case UIEventSubtypeRemoteControlPause:
[mPlayer pause];
break;
default:
break;
}
}
jest potrzebna Kolejny trik, aby wznowić odtwarzanie, gdy użytkownik naciśnie przycisk home (w którym to przypadku reprodukcji jest zawieszony z wyciszeniem).
Kiedy można kontrolować odtwarzanie wideo (mam play:
i pause:
metody) ustawić
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
i
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
i odpowiedniej metody powoływać że uruchomi stoper i wznowić reprodukcja.
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
[mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
MITS: Dzięki za odpowiedź. Mam sprawdzony link podany przez ciebie http://stackoverflow.com/questions/10478622/avplayer-play-video-in-background, ale po przeczytaniu komentarzy wygląda na to, że wideo nie będzie działać w tle. –