gpt4 book ai didi

android - YouTube视频无法在WebView中播放

转载 作者:行者123 更新时间:2023-12-03 06:29:29 25 4
gpt4 key购买 nike

YouTube视频无法在WebView中播放。

这是我的第一个应用程序,我想进行网络浏览。
当我打开YouTube时,视频没有播放,正在加载但没有播放。
一直在加载。
非常感谢您的帮助。

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"
/>

最佳答案

好像是play youtube video in WebViewYouTube Video not playing in WebView - Android的副本

为了通过WebView使其工作,我使用了以下两个步骤(版本4.2.2 / Nexus 4):

  • shouldOverrideUrlLoading上,我添加了webview.setWebChromeClient(new WebChromeClient());
  • AndroidManifest.xmlactivity标签中,我添加了android:hardwareAccelerated="true"

  • AndroidManifest.xml还应包含Internet权限。

    虽然通过WebView播放视频的确切步骤可能特定于设备和Android版本,但WebView还有其他替代方法,例如VideoView或使用Youtube Android Player API。

    EDIT1

    至于暂停和全屏显示,这实际上是我一开始提到的第二个链接。为了简化操作,我发布了适用于Nexus的代码。
  • 在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>
  • 在MainActivity类中:
    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 -添加后退按钮支持
    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);

    }
    }

    关于android - YouTube视频无法在WebView中播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973603/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com