WebView 中的 Youtube 视频无法加载

Posted

技术标签:

【中文标题】WebView 中的 Youtube 视频无法加载【英文标题】:Youtube Video in WebView doesn't load 【发布时间】:2012-01-18 12:41:54 【问题描述】:

我已经在我的 Activity 中实现了一个 WebView,为此我已授予权限

<uses-permission android:name="android.permission.INTERNET"/>

使用此代码:

    WebView mWebView;
    mWebView = (WebView) findViewById(R.id.ueber_webview);
    mWebView.getSettings().setjavascriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("file:///android_asset/MyTestPage.htm");

html 页面正在加载 *很好*,同时显示 视频 带有边框和视频中心的典型 Youtube-Play-Button。但是当我按下它时,视频 *加载*。

这是htm内容:

    <div id="playerFrame">
<iframe src="http://www.youtube.com/embed/MyURL" //have to hide the url, ends with something like "...j4Fs?rel=0"
frameborder="0" allowfullscreen id="playerPlaceHolder"></iframe>
</div>

css 内容必须正确,因为它显示正确,这应该不是问题。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

现在它可以工作了,结合了一些东西:

public class Videos extends Activity 

private WebView mWebView;
private String extra;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.videos_layout);       

    extra = getIntent().getStringExtra("VideosId");        
    mWebView = (WebView) findViewById(R.id.videos_webview); 
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);

    final Activity activity = this;
    mWebView.setWebChromeClient(new WebChromeClient() 
      public void onProgressChanged(WebView view, int progress) 
        // Activities and WebViews measure progress with different scales.
        // The progress meter will automatically disappear when we reach 100%
        activity.setProgress(progress * 1000);
      
    );

    mWebView.setWebViewClient(new MyOwnWebViewClient());   


    mWebView.loadUrl("file:///android_asset/Videos/"+extra+".htm");     
    mWebView.setWebViewClient(new MyOwnWebViewClient());      


//Ermöglicht das Zurücknavigieren im Browser mittels Back-Button
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) 
        mWebView.goBack();
        return true;
    
    return super.onKeyDown(keyCode, event);

清单中的这些条目:

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<application android:icon="@drawable/icon" android:label="@string/app_name" android:hardwareAccelerated = "true">

但我不知道,至少哪一个是必要的。此外,无法跳过部分视频,我必须一口气看完。有谁知道解决办法吗?

还有MyOwnWebViewClient

import android.webkit.WebView;
import android.webkit.WebViewClient;
//Enables the possibility for the User to navigate in the WebView and prevents,
//that the Standard-Browser is invoked

public class MyOwnWebViewClient extends WebViewClient 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
        view.loadUrl(url);
        return true;
    


【讨论】:

什么是 MyOwnWebViewClient?我正在尝试以相同的方式但没有播放视频,只有黑屏。但我的 htm 文件在浏览器中运行良好。我正在使用模拟器 2.2 和 2.3。任何帮助将不胜感激。谢谢。 我添加了 MyOwnWebViewClient 类。你可以复制它。但是看看整个代码,我编辑了它!现在它完美地工作了。 感谢您的回复 我尝试与您提到的相同,但它不起作用,点击视频时只显示黑屏。 所以黑屏显示没有做任何事情或点击后?在点击之前,有缩略图的 youtube 播放按钮?或者到底发生了什么? 当我点击播放符号时出现黑屏,然后缓冲并出现黑屏。【参考方案2】:

我遇到了同样的问题,我在github 上分享了我的代码。您需要做的就是调用这行代码:-

        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.frag_root,
                        UniversalWebViewFragment.newInstance(
                                <place your you tube url>, false)).commit();

它也支持纵向模式。

【讨论】:

以上是关于WebView 中的 Youtube 视频无法加载的主要内容,如果未能解决你的问题,请参考以下文章

Webview中的Android youtube网站正在干扰

嵌入在 Android Webview 中的 Youtube 视频不能以 SINGLE_COLUMN 布局播放

Youtube 视频未加载到 android 的 webview 中

为啥 Android WebView 不加载 youtube HTML5 iframe 视频?

Flutter WebView 插件无法播放某些 YouTube 视频

通过 xml 加载 youtube 视频不会关闭 android 中的默认进度条