2013-07-15 12 views
5

Ho un codice di WebView con cui sto cercando di riprodurre video di YouTube su un canale YouTube. Ma tutto ciò che sta facendo è mostrare l'icona di spinner su un video e non avviare mai realmente il video. Qualcuno saprebbe come risolvere il problema?Android - Visualizzazione Web non riproduzione di video YouTube

public class YoutubeActivity extends Activity 
{ 
    WebView webview = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     webview = new WebView(this); 
     webview.getSettings().setAppCacheEnabled(false); 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.setInitialScale(1); 
     webview.getSettings().setPluginState(PluginState.ON); 

     webview.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
     }); 


     WebSettings webSettings = webview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setBuiltInZoomControls(true); 
     //webSettings.getMediaPlaybackRequiresUserGesture(); 
     webSettings.setAllowContentAccess(true); 
     webSettings.setEnableSmoothTransition(true); 
     webSettings.setLoadsImagesAutomatically(true); 
     webSettings.setLoadWithOverviewMode(true); 
     webSettings.setSupportZoom(true); 
     webSettings.setUseWideViewPort(true); 

     setContentView(webview); 
     webview.loadUrl("http://www.youtube.com/g33ktalktv");   
    } 

    public void onBackPressed () 
    { 
     //Class.forName("com.***.HTML5WebView").getMethod("onPause", (Class[]) null). 
     //invoke(html5WebView, (Object[]) null); 
     webview.clearView(); 
    } 

    @Override 
    public void onStop() 
    { 
     super.onStop(); 
     // your code 

     webview.clearView(); 
    } 
} 

E questa è l'impostazione manifesta:

<activity 
    android:name="YoutubeActivity" 
    android:label="Some string" 
    android:hardwareAccelerated="true"/> 

Thannk in anticipo!

risposta

10

Utilizzando WebView di riprodurre i video di YouTube richiederebbe numerosi test e il debug on diverse versioni del sistema operativo Android a causa della differenza di funzionalità e bug tra Android 2.xe 4.x.

Un approccio meno soggetto a bug che ti dà un maggiore controllo è quello di utilizzare YouTube Android Player API per incorporare un video di YouTube nella tua app, hanno sample app quindi non dovrebbe essere troppo difficile se si seguono i loro passi.

+1

Ma il problema con il player Android di Youtuebe è che devi conoscere l'ID del video e l'app youtube deve essere installata sul tuo dispositivo. e il mio problema? http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul

+0

Da Android 5 e con WebChromeClient, tutto funziona correttamente. Ma nelle versioni di Android 4, l'errore può essere diverso. Qui ho provato a catalogare tutto: http://stackoverflow.com/questions/31591010/youtube-iframe-player-wont-show-videos-in-android-4-x-webview/38410424#38410424 – jos

2

Hai provato a utilizzare il tuo WebChromeClient? Questa domanda sembra pertinente. WebView and HTML5 <video>

È necessario creare uno di questi e implementarlo da soli, in modo simile a quello che si sta facendo per lo WebViewClient.

webview.setWebChromeClient(new WebChromeClient() { 
    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     super.onShowCustomView(view, callback); 
     if (view instanceof FrameLayout) { 
      FrameLayout frame = (FrameLayout) view; 
      if (frame.getFocusedChild() instanceof VideoView) { 
       VideoView video = (VideoView) frame.getFocusedChild(); 
       frame.removeView(video); 
       a.setContentView(video); 
       video.setOnCompletionListener(this); 
       video.setOnErrorListener(this); 
       video.start(); 
      } 
     } 
    } 
}); 

Assicurati di aggiungere webview.getSettings().setPluginsEnabled(true); alle impostazioni WebView.

E, soprattutto, per qualsiasi pagina web per caricare in un WebView, essere sicuri di avere il permesso INTERNET nel vostro manifesto:

<uses-permission android:name="android.permission.INTERNET"/> 
+11

puoi spiegare questa linea a.setContentView (video); – SJSSoft

0

Usa

<application 
     android:hardwareAccelerated="true" 
     android:allowBackup="true"> 
</application> 

Perfettamente funzionante.

Problemi correlati