2011-11-24 14 views
5

Ciao Sono nuovo di obiettivo - cavere la notifica quando un video si avvia o si arresta in UIWebView

Sto avendo un problema con il UIWebView e MPMoviePlayerController: La mia UIWebView ha un film all'interno del codice HTML (si tratta di un HTML locale file), sto usando html5 e un tag video per il video.

Voglio una notifica quando il video si avvia o si ferma in UIWebView ....

Ho provato con MPMoviePlayerPlaybackDidFinishNotification, ma doesnt fuoco ...

Ho anche cercato di fare il mio principale UIViewController E 'possibile visualizzare una mia vista e intercettare -didAddSubview: e -willRemoveSubview:. ma senza successo ...

Qualcuno sa come ottenere la notifica da uiwebview ??

risposta

19

È possibile osservare @"MPAVControllerPlaybackStateChangedNotification" (utilizzare nil per l'oggetto). Questa notifica non è documentata quindi non so se l'App Store approverà la tua app.

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(playbackStateDidChange:) 
    name:@"MPAVControllerPlaybackStateChangedNotification" 
    object:nil]; 

La notifica ha la chiave MPAVControllerNewStateParameter nella sua userInfo. Il valore sembra essere 0 prima che inizi la riproduzione, 1 quando è in pausa, 2 quando è in riproduzione e 3 (momentaneamente) quando si trascina il cursore di riproduzione.

+0

consigli fantastici - ho detto spesso alle persone che non è possibile osservare un lettore di Web view per le notifiche - capisco, allora ho sbagliato. – Till

+0

In realtà non sa quale lettore di film sta osservando. Spero che tu ne abbia solo uno da osservare. :) –

+0

come cambiare il video dalla riproduzione alla pausa, solo dalla notifica? – lakesh

1

Ho cercato molto su questo .. Ecco la soluzione che ho trovato per ottenere la chiamata di notifica di fine riproduzione. Codice testato su iOS6.0 e successivo a. Tutto grazie a @Morten.

In viewDidLoad aggiungere osservatore

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(playbackDidEnd:) 
name:@"MPAVControllerItemPlaybackDidEndNotification"//@"MPAVControllerPlaybackStateChangedNotification" 
object:nil]; 

Poi basta aggiungere seguente codice javascript webViewDidFinishLoad delegato come di seguito

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    //http://stackoverflow.com/a/12504918/860488 
    [videoView stringByEvaluatingJavaScriptFromString:@"\ 
            var intervalId = setInterval(function() { \ 
             var vph5 = document.getElementById(\"video-player\");\ 
             if (vph5) {\ 
              vph5.playVideo();\ 
              clearInterval(intervalId);\ 
             } \ 
            }, 100);"]; 
} 

- (void)playbackDidEnd:(NSNotification *)note 
{ 
//do your stuff here 
    [videoView removeFromSuperview]; 
    videoView.delegate = nil; 
    videoView = nil; 
} 

Otterrete playbackDid Fine chiamata nella sopra selezionato e può fare tutto ciò che è la vostra esigenza. Happy Coding !!

+0

la barra Volume Seek non viene visualizzata in iOS 7 ... !! qualche idea??? –

+0

versione non veloce? –

Problemi correlati