2013-03-15 33 views

Odpowiedz

0

Można wykonać to zadanie w tle, gdy aplikacja znajduje się w tle:

1> audio
2> lokalizacja
3> VoIP
4> kiosk-content
5> zewnętrznych akcesoriów
6> Bluetooth centralny
7> bluetooth-obwodowy
zobaczyć ten link,

http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html 
http://www.rideitdown.com/2012/10/how-to-listen-youtube-videos-in.html 

też może to pomóc: AVPlayer play video in background

+0

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. –

14

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]; 
} 
+0

ok dzięki, pozwól mi to sprawdzić, a poinformuję Cię, czy to zadziała, czy nie. –

+0

w rzeczywistości aplikacja youtube może odtwarzać wideo (przez grę powietrzną) w tle. to jest niesamowite – chings228

+0

Dzięki za kod! Mam wszystko skonfigurowane w moim projekcie i działa z przyciskiem Home i przełączaniem do innej aplikacji, ale blokada ekranu zatrzymuje wideo. Odkryłem jednak, że kiedy komentuję sekcję 'AVPlayerLayer', gra ona na ekranie blokady. Oczywiście potrzebuję PlayerLayer, aby zobaczyć wideo. Każdy pomysł, jak uzyskać "AVPlayerLayer" po prostu iść z przepływem, że "AVPlayer" wydaje się dobrze, a nie przestać grać po zablokowaniu telefonu? – Nerrolken

0

Spróbuj kod w swoim applicationDidEnterBackground:

UIApplication *app = [UIApplication sharedApplication]; 
bgTask = 0; 

backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES]; 

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
[app endBackgroundTask:bgTask]; 

znalazłem go gdzieś na stosie działa na mnie

również sprawdzić ten samouczek, który obejmuje tryby tle tym podłożonym dźwiękiem .. http://www.raywenderlich.com/29948/backgrounding-for-ios

0

Powyższe odpowiedzi wstrzymują wideo na sekundę, gdy aplikacja wchodzi do deseru d, ale za pomocą metody wspomnianej poniżej utrzymuje odtwarzanie wideo, podczas gdy aplikacja przechodzi do tła bez żadnych usterki.

Jeśli bieżący element AVPlayera wyświetla wideo na ekranie urządzenia, odtwarzanie AVPlayer zostanie automatycznie wstrzymane, gdy aplikacja zostanie wysłana na drugi plan. Istnieją dwa sposoby, aby zapobiec tej pauzy:

  1. wyłączyć ścieżek wideo w pozycji gracza (tylko zawartość pliku-based).
  2. Usuń AVPlayerLayer ze skojarzonego odtwarzacza AVPlayer (ustaw właściwość odtwarzacza AVPlayerLayer na zero).

mającej

Playing media while in the background using AV Foundation on iOS

Powiązane problemy