I have an tabbed application realized with ABS and Fragments. One of this fragments should contain a webview that shows a certain youtube channel, where the user can look through the channel's videos and watch them, if he likes. Therefore I want to show the videos in the webview. Everything works fine until I click play to watch a video. Than it only shows the loading circle. I've tried some approaches I found here, like turning on hardware acceleration or implemeting my own WebChromeClient. Either it changes nothing or the application offers me to select the native browser or Chrome to open the link. Any idea what I have to do get the videos to play inside the webview? Attached is my current implementation:
private WebView wv;
private FrameLayout mContentView;
private FrameLayout mCustomViewContainer;
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
setHasOptionsMenu(true);
View v = inflater.inflate(R.layout.didacta_channel_layout, container, false);
wv = (WebView) v.findViewById(R.id.test_web);
mContentView = (FrameLayout) v.findViewById(R.id.main_content);
mCustomViewContainer = (FrameLayout) v.findViewById(R.id.fullscreen_custom_content);
wv.getSettings().setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT < 8) {
wv.getSettings().setPluginsEnabled(true);
} else {
wv.getSettings().setPluginState(PluginState.ON);
}
wv.setWebChromeClient(new DDChromeClient());
wv.loadUrl("http://www.youtube.com/user/bikltv");
return v;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.add(0, 1, 0, "Restart")
.setIcon(R.drawable.ic_menu_refresh)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if(item.getItemId() == android.R.id.home)
{
((DidactaNavigationActivity)getActivity()).finish();
}
if(item.getItemId() == 1)
{
wv.loadUrl("http://www.youtube.com/user/bikltv");
}
return super.onOptionsItemSelected(item);
}
class DDChromeClient extends WebChromeClient
{
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
{
// if a view already exists then immediately terminate the new one
if (mCustomView != null)
{
callback.onCustomViewHidden();
return;
}
// Add the custom view to its container.
mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
mCustomView = view;
mCustomViewCallback = callback;
// hide main browser view
mContentView.setVisibility(View.GONE);
// Finally show the custom view container.
mCustomViewContainer.setVisibility(View.VISIBLE);
mCustomViewContainer.bringToFront();
}
public void onHideCustomView()
{
if (mCustomView == null)
return;
// Hide the custom view.
mCustomView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mCustomView);
mCustomView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
}
}