2013-07-15 41 views
5

Tôi có một số mã WebView mà tôi đang cố gắng phát video trên YouTube trên kênh YouTube. Nhưng tất cả những gì nó đang làm là hiển thị biểu tượng quay tròn trên video và không bao giờ thực sự bắt đầu video. Có ai biết cách sửa lỗi đó không?Android - WebView không phát video trên 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(); 
    } 
} 

Và đây là thuộc tính biểu hiện:

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

Thannk trước!

Trả lời

10

Sử dụng WebView để chơi video YouTube sẽ yêu cầu thử nghiệm rộng rãi và gỡ lỗi trên các phiên bản hệ điều hành Android khác nhau do sự khác biệt về chức năng và lỗi giữa Android 2.x và 4.x.

Cách tiếp cận ít gây lỗi cho phép bạn kiểm soát nhiều hơn là sử dụng YouTube Android Player API để nhúng video YouTube vào ứng dụng của riêng mình, chúng có số sample app do đó không quá khó khăn nếu bạn làm theo các bước của chúng.

+1

Nhưng vấn đề khi sử dụng trình phát Android Youtuebe là bạn cần phải biết id video và ứng dụng youtube phải được cài đặt trong thiết bị của mình. còn vấn đề của tôi thì sao? http://stackoverflow.com/questions/18533678/playing-youtube-videos-smoothly-in-web-view – anshul

+0

Từ Android 5 và với WebChromeClient, mọi thứ đều hoạt động tốt. Nhưng trong phiên bản Android 4, lỗi có thể khác. Ở đây tôi đã cố gắng liệt kê tất cả: http://stackoverflow.com/questions/31591010/youtube-iframe-player-wont-show-videos-in-android-4-x-webview/38410424#38410424 – jos

2

Bạn đã thử sử dụng WebChromeClient của riêng mình chưa? Câu hỏi này có vẻ liên quan. WebView and HTML5 <video>

Bạn sẽ cần phải tạo một trong số này và tự thực hiện nó, tương tự như những gì bạn đang làm cho 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(); 
      } 
     } 
    } 
}); 

Đảm bảo bạn thêm webview.getSettings().setPluginsEnabled(true); vào cài đặt chế độ xem web của mình.

Và quan trọng nhất, cho bất kỳ trang web để tải trong một WebView, hãy chắc chắn có sự cho phép INTERNET trong Manifest của bạn:

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

bạn vui lòng giải thích dòng này- a.setContentView (video); – SJSSoft

0

Sử dụng

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

hoàn hảo làm việc.

Các vấn đề liên quan