5

我有一些 WebView 代码,我正在尝试在 YouTube 频道上播放 YouTube 视频。但它所做的只是在视频上显示微调器图标,而从未真正开始播放视频。有人知道如何解决吗?

public class YoutubeActivity extends Activity
{
    WebView webview = null;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);   

        webview = new WebView(this);
        webview.getSettings().setAppCacheEnabled(false);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setInitialScale(1);
        webview.getSettings().setPluginState(PluginState.ON);

        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });


        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setBuiltInZoomControls(true);
        //webSettings.getMediaPlaybackRequiresUserGesture();
        webSettings.setAllowContentAccess(true);
        webSettings.setEnableSmoothTransition(true);
        webSettings.setLoadsImagesAutomatically(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setSupportZoom(true);
        webSettings.setUseWideViewPort(true);

        setContentView(webview);
        webview.loadUrl("http://www.youtube.com/g33ktalktv");           
    }

    public void onBackPressed ( )
    {
        //Class.forName("com.***.HTML5WebView").getMethod("onPause", (Class[]) null).
        //invoke(html5WebView, (Object[]) null);
        webview.clearView();
    } 

    @Override
    public void onStop()
    {
       super.onStop();
       // your code

       webview.clearView();
    }
}

这是清单设置:

<activity
    android:name="YoutubeActivity"
    android:label="Some string" 
    android:hardwareAccelerated="true"/>

提前致谢!

4

3 回答 3

11

由于 Android 2.x 和 4.x 之间的功能差异和错误,使用 WebView 播放 YouTube 视频需要在不同的 Android OS 版本上进行大量测试和调试。

一种更不容易出错的方法是使用YouTube Android Player API将 YouTube 视频嵌入到您自己的应用程序中,这种方法更不容易出错,他们有示例应用程序,因此如果您按照他们的步骤操作应该不会太难。

于 2013-07-16T01:57:00.327 回答
1

你试过用你自己的WebChromeClient吗?这个问题似乎很相关。 WebView 和 HTML5 <视频>

您需要创建其中一个并自己实现它,类似于您为WebViewClient.

webview.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        super.onShowCustomView(view, callback);
        if (view instanceof FrameLayout) {
            FrameLayout frame = (FrameLayout) view;
            if (frame.getFocusedChild() instanceof VideoView) {
                VideoView video = (VideoView) frame.getFocusedChild();
                frame.removeView(video);
                a.setContentView(video);
                video.setOnCompletionListener(this);
                video.setOnErrorListener(this);
                video.start();
            }
        }
    }
});

确保添加webview.getSettings().setPluginsEnabled(true);到您的 webview 设置。

最重要的是,对于要加载的任何WebView网页,请务必INTERNET在您的清单中获得许可:

<uses-permission android:name="android.permission.INTERNET"/>
于 2013-07-16T01:42:16.643 回答
0

利用

<application
        android:hardwareAccelerated="true"
        android:allowBackup="true">
</application>

完美工作。

于 2017-04-15T12:15:37.300 回答