Android:某频道的Youtube视频未在Webview中播放

Android:某频道的Youtube视频未在Webview中播放,android,youtube,android-webview,Android,Youtube,Android Webview,我用ABS和Fragments实现了一个选项卡式应用程序。其中一个片段应该包含一个显示某个youtube频道的网络视图,用户可以在其中浏览该频道的视频并观看,如果他喜欢的话。因此,我想在webview中显示视频。 一切正常,直到我点击播放观看视频。它只显示加载循环。 我在这里找到了一些方法,比如打开硬件加速或实现我自己的WebChromeClient。要么什么都不改变,要么应用程序让我选择本机浏览器或Chrome打开链接。 你知道我该怎么做才能让视频在网络视图中播放吗?附件是我目前的执行情况:

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

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);
    }
}
private-WebView-wv;
私有框架布局mContentView;
私有框架布局mCustomViewContainer;
私有视图mCustomView;
私有WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams封面\屏幕\重力\中心=新FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_内容,
ViewGroup.LayoutParams.WRAP_内容,重心);
@抑制警告(“弃用”)
@SuppressLint(“SetJavaScriptEnabled”)
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
super.onCreateView(充气机、容器、保存状态);
设置选项菜单(真);
视图v=充气机。充气(R.layout.didacta\u channel\u布局,容器,假);
wv=(WebView)v.findViewById(R.id.test_-web);
mContentView=(FrameLayout)v.findviewbyd(R.id.main\u内容);
mCustomViewContainer=(FrameLayout)v.findViewById(R.id.fullscreen\u custom\u content);
wv.getSettings().setJavaScriptEnabled(true);
if(Build.VERSION.SDK_INT<8){
wv.getSettings().setPluginsEnabled(true);
}否则{
wv.getSettings().setPluginState(PluginState.ON);
}
wv.setWebChromeClient(新的DDChromeClient());
wv.loadUrl(“http://www.youtube.com/user/bikltv");
返回v;
}
创建选项菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机);
菜单.添加(0,1,0,“重新启动”)
.setIcon(R.drawable.ic\u菜单\u刷新)
.setShowAsAction(菜单项。在房间中显示作为操作);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项)
{
if(item.getItemId()==android.R.id.home)
{
((DidactaNavigationActivity)getActivity()).finish();
}
if(item.getItemId()==1)
{
wv.loadUrl(“http://www.youtube.com/user/bikltv");
}
返回super.onOptionsItemSelected(项目);
}
类DDChromeClient扩展了WebChromeClient
{
ShowCustomView(视图视图,WebChromeClient.CustomViewCallback回调)上的公共无效
{
//如果视图已存在,则立即终止新视图
如果(mCustomView!=null)
{
onCustomViewHidden();
返回;
}
//将自定义视图添加到其容器中。
mCustomViewContainer.addView(视图、封面、屏幕、重心);
mCustomView=视图;
mCustomViewCallback=回调;
//隐藏主浏览器视图
mContentView.setVisibility(View.GONE);
//最后显示自定义视图容器。
mCustomViewContainer.setVisibility(View.VISIBLE);
mCustomViewContainer.bringToFront();
}
公共无效onHideCustomView()
{
如果(mCustomView==null)
返回;
//隐藏自定义视图。
mCustomView.setVisibility(View.GONE);
//从其容器中删除自定义视图。
移除视图(mCustomView);
mCustomView=null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
//显示内容视图。
mContentView.setVisibility(View.VISIBLE);
}
}

不要使用网络视图播放YouTube视频?如果您使用Android YouTube API,则不需要它。更多信息请参阅


通过Android YouTube API,您可以将视频传递给YouTube Android播放器,就是这样。视频将在您的应用程序中播放

最后在我的解决方案中。。。

在设置webchrome客户机之后,设置webview客户机两次不知何故做到了这一点。
对我来说,显示完整频道的更简单解决方案。

android webview有缺陷。最好使用youtube api加载3gp视频并在本机VideoView中播放。当我想显示频道而不仅仅是单个视频时,我如何做到这一点?可能是重复的