This seems to be a YouTube bug, watching YouTubeAndroidPlayerAPI cannot play some videos for the detailed information I collected.
the only workaround available at this time seems to open the video in the official YouTube app with the intent or replace a fragment of the WebView player. I preferred this second solution.
The standard WebView is very limited and will not show a button for full-screen video viewing. You need to create a class that extends WebChromeClient:
public class MyWebChromeClient extends WebChromeClient { FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); @Override public void onShowCustomView(View view, CustomViewCallback callback) { if (mCustomView != null) { callback.onCustomViewHidden(); return; } mContentView = (LinearLayout) findViewById(R.id.scheda_video_activity); mContentView.setVisibility(View.GONE); mCustomViewContainer = new FrameLayout(SchedaVideoActivity.this); mCustomViewContainer.setLayoutParams(LayoutParameters); mCustomViewContainer.setBackgroundResource(android.R.color.black); view.setLayoutParams(LayoutParameters); mCustomViewContainer.addView(view); mCustomView = view; mCustomViewCallback = callback; mCustomViewContainer.setVisibility(View.VISIBLE); setContentView(mCustomViewContainer); } @Override public void onHideCustomView() { if (mCustomView == null) { return; } else { mCustomView.setVisibility(View.GONE); mCustomViewContainer.removeView(mCustomView); mCustomView = null; mCustomViewContainer.setVisibility(View.GONE); mCustomViewCallback.onCustomViewHidden(); mContentView.setVisibility(View.VISIBLE); setContentView(mContentView); } } }
and then initialize the webview:
WebView myWebView = (WebView)findViewById(R.id.webview); MyWebChromeClient mWebChromeClient = new MyWebChromeClient(); myWebView.setWebChromeClient(mWebChromeClient); myWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
Finally, upload the video to WebView:
myWebView.loadUrl("https://www.youtube.com/embed/"+youtube_id);
If you want to adapt the dimensions of the WebView to the YouTube player, you can do this:
Point size = new Point(); getWindowManager().getDefaultDisplay().getSize(size); myWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)Math.round(size.x/1.77)));
frabbe
source share