YouTube的视频不打的的WebView不打、视频、YouTube、WebView

2023-09-12 03:42:24 作者:放白鹿于林间

的YouTube视频不打在web视图。

据我的第一个应用程序,我想做一个web视图。 当我打开YouTube上的视频没有播放,加载但不是在玩。 加载所有的时间。 非常感谢你的帮助。

Java的:

 公共类MainActivity延伸活动{

    私人的WebView mWebView;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        mWebView =(web视图)findViewById(R.id.webview);
        mWebView.getSettings()setJavaScriptEnabled(真)。
        mWebView.loadUrl(http://www.google.com);
        mWebView.setWebViewClient(新HelloWebViewClient());

    }

私有类HelloWebViewClient扩展WebViewClient {
        @覆盖
        公共布尔shouldOverrideUrlLoading(的WebView的WebView,字符串URL)
        {
        webview.loadUrl(URL);
        返回true;
    }}

    @覆盖
    公共布尔的onkeydown(INT键code,KeyEvent的事件)
    {
        如果((钥匙code == KeyEvent.KEY code_BACK)及和放大器; mWebView.canGoBack())
        {
            mWebView.goBack();
            返回true;
        }
        返回super.onKeyDown(键code,事件);

    }}
 

XML:

 < XML版本=1.0编码=UTF-8&GT?;
<的WebView的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / web视图
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
/>
 

解决方案

好像的播放重复YouTube视频中的WebView 和YouTube视频不是在玩中的WebView - 安卓

在国内怎么用idm下载youtube上面的视频

要让它通过的WebView工作,我用了以下两个步骤(4.2.2版/的Nexus 4):

shouldOverrideUrlLoading 我加了 webview.setWebChromeClient(新WebChromeClient());

的Andr​​oidManifest.xml 活动标签我加入安卓hardwareAccelerated =真正的

AndroidManifest.xml中也应包含Internet权限。

尽管通过的WebView播放视频的具体步骤可以是特定于设备和Android版本,也有其他替代品的WebView,像VideoView或使用YouTube的Andr​​oid播放器API。

EDIT1

至于暂停和全屏,其实这是我在开始时提到的第二个环节。为了更方便,我张贴在我的Nexus奏效code。

在activity_main.xml

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:以下属性来=@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
 工具:上下文=MainActivity。>

<的FrameLayout
          机器人:ID =@ + ID / fullscreen_custom_content
          机器人:layout_width =match_parent
          机器人:layout_height =match_parent
          机器人:后台=#FF000000/>

<的LinearLayout
          机器人:ID =@ + ID / LinearLayout中
          机器人:layout_width =FILL_PARENT
          机器人:layout_height =FILL_PARENT>

     <的WebView
           机器人:ID =@ + ID / web视图
           机器人:layout_width =FILL_PARENT
           机器人:layout_height =FILL_PARENT/>

< / LinearLayout中>
< / RelativeLayout的>
 

在MainActivity类:

 公共类MainActivity延伸活动{

私人的WebView mWebView;
私人的LinearLayout mContentView;
私人的FrameLayout mCustomViewContainer;
私人WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =新FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT,Gravity.CENTER);

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    mContentView =(的LinearLayout)findViewById(R.id.linearlayout);
    mWebView =(web视图)findViewById(R.id.webView);
    mCustomViewContainer =(的FrameLayout)findViewById(R.id.fullscreen_custom_content);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setJavaScriptEnabled(真正的);
    webSettings.setUseWideViewPort(真正的);
    webSettings.setLoadWithOverviewMode(真正的);

    mWebView.loadUrl(http://www.google.com);
    mWebView.setWebViewClient(新HelloWebViewClient());

}

@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    //充气菜单;这增加了项目操作栏,如果它是present。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}



私有类HelloWebViewClient扩展WebViewClient {
    @覆盖
    公共布尔shouldOverrideUrlLoading(的WebView的WebView,字符串URL)
    {
        webview.setWebChromeClient(新WebChromeClient(){

            私人查看mCustomView;

             @覆盖
            公共无效onShowCustomView(查看视图,WebChromeClient.CustomViewCallback回调)
            {
                //如果一个视图已经存在,则立即终止新
                如果(mCustomView!= NULL)
                {
                    callback.onCustomViewHidden();
                    返回;
                }

                //自定义视图添加到它的容器。
                mCustomViewContainer.addView(查看,COVER_SCREEN_GRAVITY_CENTER);
                mCustomView =图。
                mCustomViewCallback =回调;

                //隐藏主浏览器视图
                mContentView.setVisibility(View.GONE);

                //最后显示自定义视图容器。
                mCustomViewContainer.setVisibility(View.VISIBLE);
                mCustomViewContainer.bringToFront();
            }

        });

      webview.loadUrl(URL);

      返回true;
    }
}

@覆盖
公共布尔的onkeydown(INT键code,KeyEvent的事件)
{
    如果((钥匙code == KeyEvent.KEY code_BACK)及和放大器; mWebView.canGoBack())
    {
        mWebView.goBack();
        返回true;
    }
    返回super.onKeyDown(键code,事件);

}
}
 

EDIT2 - 增加支持后退按钮

 公共类MainActivity延伸活动{

私人的WebView mWebView;
私人的LinearLayout mContentView;
私人的FrameLayout mCustomViewContainer;
私人查看mCustomView;
私人WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =新FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT,Gravity.CENTER);

私人WebChromeClient mWebChromeClient;

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    mContentView =(的LinearLayout)findViewById(R.id.linearlayout);
    mWebView =(web视图)findViewById(R.id.webView);
    mCustomViewContainer =(的FrameLayout)findViewById(R.id.fullscreen_custom_content);

    mWebChromeClient =新WebChromeClient(){


         @覆盖
        公共无效onShowCustomView(查看视图,WebChromeClient.CustomViewCallback回调)
        {
            //如果一个视图已经存在,则立即终止新
            如果(mCustomView!= NULL)
            {
                callback.onCustomViewHidden();
                返回;
            }

            //自定义视图添加到它的容器。
            mCustomViewContainer.addView(查看,COVER_SCREEN_GRAVITY_CENTER);
            mCustomView =图。
            mCustomViewCallback =回调;

            //隐藏主浏览器视图
            mContentView.setVisibility(View.GONE);

            //最后显示自定义视图容器。
            mCustomViewContainer.setVisibility(View.VISIBLE);
            mCustomViewContainer.bringToFront();
        }

         @覆盖
         公共无效onHideCustomView()
         {
             如果(mCustomView == NULL)
                 返回;

             //隐藏的自定义视图。
             mCustomView.setVisibility(View.GONE);
             //将其从容器中的自定义视图。
             mCustomViewContainer.removeView(mCustomView);
             mCustomView = NULL;
             mCustomViewContainer.setVisibility(View.GONE);
             mCustomViewCallback.onCustomViewHidden();

             //显示的内容视图。
             mContentView.setVisibility(View.VISIBLE);
         }
    };

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setJavaScriptEnabled(真正的);
    webSettings.setUseWideViewPort(真正的);
    webSettings.setLoadWithOverviewMode(真正的);

    mWebView.loadUrl(http://www.google.com);
    mWebView.setWebViewClient(新HelloWebViewClient());

}

@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    //充气菜单;这增加了项目操作栏,如果它是present。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}



私有类HelloWebViewClient扩展WebViewClient {

    @覆盖
    公共布尔shouldOverrideUrlLoading(的WebView的WebView,字符串URL)
    {
        webview.setWebChromeClient(mWebChromeClient);
        webview.loadUrl(URL);

      返回true;
    }
}

@覆盖
保护无效的onStop(){

    super.onStop();
    如果(mCustomView!= NULL)
    {
        如果(mCustomViewCallback!= NULL)
            mCustomViewCallback.onCustomViewHidden();
        mCustomView = NULL;
    }

}

@覆盖
公共无效onBack pressed(){

    super.onBack pressed();
     如果(mCustomView!= NULL)
     {
         mWebChromeClient.onHideCustomView();
     } 其他
     {
         完();
     }
}

@覆盖
公共布尔的onkeydown(INT键code,KeyEvent的事件)
{
    如果((钥匙code == KeyEvent.KEY code_BACK)及和放大器; mWebView.canGoBack())
    {
        mWebView.goBack();
        返回true;
    }
    返回super.onKeyDown(键code,事件);

}
}
 

YouTube Video not playing in WebView.

It my first app ,I Want to do a webview. When I open YouTube the video not playing, is loading but not playing. Is loading all the time. Thank you so much for helping.

Java:

public class MainActivity extends Activity {

    private WebView mWebView;  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl("http://www.google.com");
        mWebView.setWebViewClient(new HelloWebViewClient());

    }

private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView webview, String url)
        {
        webview.loadUrl(url);
        return true;
    }}

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
        {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);

    }   }

Xml:

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>

解决方案

Seems like duplicate of play youtube video in WebView and YouTube Video not playing in WebView - Android

To make it work via WebView, I used the following two steps (version 4.2.2/Nexus 4):

On shouldOverrideUrlLoading I added webview.setWebChromeClient(new WebChromeClient());

In AndroidManifest.xml for activity tag I added android:hardwareAccelerated="true"

AndroidManifest.xml should also contain Internet permission.

While exact steps with playing video via WebView can be specific to device and Android version, there are also other alternatives to WebView, like VideoView or using Youtube Android Player API.

EDIT1

As for pause and full screen, this is actually a second link I mentioned in the beginning. To make it easier, I am posting code that worked on my Nexus.

In activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
 tools:context=".MainActivity" >

<FrameLayout
          android:id="@+id/fullscreen_custom_content"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#FF000000"/>

<LinearLayout 
          android:id="@+id/linearlayout"
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent"> 

     <WebView
           android:id="@+id/webView"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" />

</LinearLayout>
</RelativeLayout>

In MainActivity class:

public class MainActivity extends Activity {

private WebView mWebView;  
private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mContentView = (LinearLayout) findViewById(R.id.linearlayout);
    mWebView = (WebView) findViewById(R.id.webView);
    mCustomViewContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);

    mWebView.loadUrl("http://www.google.com");
    mWebView.setWebViewClient(new HelloWebViewClient());

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}



private class HelloWebViewClient extends WebViewClient  {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webview, String url)
    {
        webview.setWebChromeClient(new WebChromeClient() {

            private View mCustomView;

             @Override
            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();
            }

        }); 

      webview.loadUrl(url);

      return true;
    }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
    {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);

} 
}

EDIT2 - adding back button support

public class MainActivity extends Activity {

private WebView mWebView;  
private LinearLayout 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);

private WebChromeClient mWebChromeClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mContentView = (LinearLayout) findViewById(R.id.linearlayout);
    mWebView = (WebView) findViewById(R.id.webView);
    mCustomViewContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);

    mWebChromeClient = new WebChromeClient() {


         @Override
        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();
        }

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

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);

    mWebView.loadUrl("http://www.google.com");
    mWebView.setWebViewClient(new HelloWebViewClient());

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}



private class HelloWebViewClient extends WebViewClient  {

    @Override
    public boolean shouldOverrideUrlLoading(WebView webview, String url)
    {
        webview.setWebChromeClient(mWebChromeClient);   
        webview.loadUrl(url);

      return true;
    }
}

@Override
protected void onStop() {

    super.onStop();
    if (mCustomView != null)
    {
        if (mCustomViewCallback != null)
            mCustomViewCallback.onCustomViewHidden();
        mCustomView = null;
    }

}

@Override
public void onBackPressed() {

    super.onBackPressed();
     if (mCustomView != null)
     {
         mWebChromeClient.onHideCustomView();
     } else
     {
         finish();
     }
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
    {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);

}   
}