2013-07-15 357 views
5

我有一些WebView代碼,我試圖在YouTube頻道上播放YouTube視頻。但它所做的只是在視頻上顯示微調器圖標,並且從未真正開始播放視頻。誰會知道如何解決這個問題?Android - WebView不能播放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(); 
    } 
} 

這是清單設置:

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

Thannk提前!

回答

10

使用的WebView來播放YouTube視頻將需要大量的測試和調試上由於Android 2.x和4.x之間的功能差異和不同的Android操作系統版本。

一個不太容易出錯的做法,爲您提供更多的控制是使用YouTube Android Player API嵌入YouTube視頻到您自己的應用程序,他們有sample app所以,如果你按照他們的步驟,它應該不會太困難。

+1

但是,使用Youtuebe Android播放器的問題是,您需要知道視頻ID,並且youtube應用必須安裝在您的設備中。 我的問題呢? http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul

+0

從Android 5和WebChromeClient,一切工作正常。但在Android 4版本中,錯誤可能不同。在這裏,我試圖編目全部:http://stackoverflow.com/questions/31591010/youtube-iframe-player-wont-show-videos-in-android-4-x-webview/38410424#38410424 – jos

2

您是否嘗試過使用自己的WebChromeClient?這個問題似乎相關。 WebView and HTML5 <video>

您需要創建其中一個並自己實現它,類似於您爲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(); 
      } 
     } 
    } 
}); 

確保您將webview.getSettings().setPluginsEnabled(true);添加到您的webview設置中。

而且最重要的是,任何網頁在WebView加載,一定有INTERNET許可,您的清單:

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

可以請你解釋一下這行 - a.setContentView(video); – SJSSoft

0

使用

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

完美的工作。

相關問題