【问题标题】:Android: Youtube videos of a channel are not playing in WebviewAndroid:一个频道的 Youtube 视频没有在 Webview 中播放
【发布时间】:2013-09-11 11:07:17
【问题描述】:

我有一个使用 ABS 和 Fragments 实现的选项卡式应用程序。其中一个片段应该包含一个显示某个 youtube 频道的 web 视图,用户可以在其中查看频道的视频并观看它们,如果他喜欢的话。因此,我想在 webview 中显示视频。 一切正常,直到我点击播放观看视频。比它只显示加载圈。 我尝试了一些在这里找到的方法,比如打开硬件加速或实现我自己的 WebChromeClient。要么它什么都没有改变,要么应用程序让我选择本机浏览器或 Chrome 来打开链接。 知道我必须做什么才能让视频在 webview 中播放吗?附上我目前的实现:

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);
    }
}

【问题讨论】:

  • android webview 有问题最好使用 youtube api 加载 3gp 视频并在本机 videoview 中播放
  • 当我想显示一个频道而不仅仅是一个视频时,我该怎么做?

标签: android youtube android-webview


【解决方案1】:

不使用 WebView 播放 YouTube 视频?如果您使用 Android YouTube API,则不需要它。更多信息在Click Here

使用 Android YouTube API,您可以将 VID 传递给 YouTube Android 播放器。该视频将在您的应用程序中播放

【讨论】:

    【解决方案2】:

    终于在这里找到了我的解决方案... https://stackoverflow.com/a/8490751/687475

    在设置 webchrome 客户端后设置 webview 客户端两次以某种方式做到了。 对我来说显示完整频道的更简单的解决方案。

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 2013-07-13
      • 2014-02-10
      • 2017-12-23
      • 2017-12-29
      • 2012-09-24
      • 2011-01-18
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多