如何播放HTML5视频和YouTube视频中的Andr​​oid的WebView?视频、YouTube、WebView、oid

由网友(乜许、伱卟懂)分享简介:我尝试播放HTML5视频,并在机器人的WebView的YouTube视频,但无法显示视频在Android的WebView屏幕。并播放该视频。我已经用低于code片段... 布局xml文件的命名:的test.xml包含以下code snipet:< XML版本=1.0编码=UTF-8&GT?;< Linea...

我尝试播放HTML5视频,并在机器人的WebView的YouTube视频,但无法显示视频在Android的WebView屏幕。并播放该视频。

我已经用低于code片段...

布局xml文件的命名:的test.xml包含以下code snipet:

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

和活动课的名字:Test.java包含code如下:

 公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.test);

        的WebView mWebView =(web视图)findViewById(R.id.webViewTest);


        mWebView.getSettings()setJavaScriptEnabled(真)。
        。mWebView.getSettings()setAllowFileAccess(真正的);
        mWebView.getSettings()setPluginsEnabled(真)。
        mWebView.setWebChromeClient(新chromeClient());
        mWebView.setWebViewClient(新WebViewClient(){

        });
        mWebView.loadUrl(http://broken-links.com/tests/video/);
    }

    公共类chromeClient扩展WebChromeClient实现OnCompletionListener,OnErrorListener {
        私人的WebView WV;
        私人VideoView mVideoView;
        私人的LinearLayout mContentView;
        私人的FrameLayout mCustomViewContainer;
        私人WebChromeClient.CustomViewCallback mCustomViewCallback;
        FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =新FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.FILL_PARENT,Gravity.CENTER);

        @覆盖
        公共无效onShowCustomView(查看视图,CustomViewCallback回调){
            如果(查看的instanceof的FrameLayout){
                WV =(web视图)findViewById(R.id.webViewTest);
                mCustomViewContainer =(的FrameLayout)视图;
                mCustomViewCallback =回调;
                mContentView =(的LinearLayout)findViewById(R.id.rltvLayoutTest);
                如果(mCustomViewContainer.getFocusedChild()的instanceof VideoView){
                    mVideoView =(VideoView)mCustomViewContainer.getFocusedChild();
                    // frame.removeView(视频)
                    mContentView.setVisibility(View.GONE);
                    mCustomViewContainer.setVisibility(View.VISIBLE);
                    的setContentView(mCustomViewContainer);
                    mVideoView.setOnCompletionListener(本);
                    mVideoView.setOnErrorListener(本);
                    mVideoView.start();

                }
            }
        }

        公共无效onHideCustomView(){
            如果(mVideoView == NULL)
                返回;
            //隐藏的自定义视图。
            mVideoView.setVisibility(View.GONE);
            //将其从容器中的自定义视图。
            mCustomViewContainer.removeView(mVideoView);
            mVideoView = NULL;
            mCustomViewContainer.setVisibility(View.GONE);
            mCustomViewCallback.onCustomViewHidden();
            //显示的内容视图。
            mContentView.setVisibility(View.VISIBLE);
        }


        公共无效onCompletion(MediaPlayer的MP){
            mp.stop();
            mCustomViewContainer.setVisibility(View.GONE);
            onHideCustomView();
            的setContentView(mContentView);
        }

        公共布尔的onError(MediaPlayer的为arg0,诠释ARG1,ARG2 INT){
            的setContentView(mContentView);
            返回true;
        }
    }
 

解决方案

我用 html5webview 来解决这个problem.Download,并把它放到你的项目,那么你可以code就是这样的。

 私人HTML5WebView mWebView;
字符串URL =SOMEURL;
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    mWebView =新HTML5WebView(本);
    如果(savedInstanceState!= NULL){
            mWebView.restoreState(savedInstanceState);
    } 其他 {
            mWebView.loadUrl(URL);
    }
    的setContentView(mWebView.getLayout());
}
@覆盖
公共无效的onSaveInstanceState(包outState){
    super.onSaveInstanceState(outState);
    mWebView.saveState(outState);
}
 

让视频旋转,把机器人:configChanges =方向code到你的活动 例如(AndroidManifest.xml中)

 <活动机器人:ui.HTML5Activity名称=机器人:configChanges =方向/>
 

和覆盖onConfigurationChanged方法。

  @覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
     super.onConfigurationChanged(NEWCONFIG);
}
 

I am trying to play html5 video and youtube video within android webview, but can't display video on android webview screen. and play this video.

I have used below code snippet...

layout xml file naming: test.xml contains below code snipet:

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

and Activity Class name: Test.java contains code given below:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);

        WebView mWebView = (WebView)findViewById(R.id.webViewTest);


        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setAllowFileAccess(true);
        mWebView.getSettings().setPluginsEnabled(true);
        mWebView.setWebChromeClient(new chromeClient());
        mWebView.setWebViewClient(new WebViewClient(){

        });
        mWebView.loadUrl("http://broken-links.com/tests/video/");
    }

    public class chromeClient extends WebChromeClient implements OnCompletionListener, OnErrorListener{
        private WebView wv;
        private VideoView mVideoView;
        private LinearLayout mContentView;
        private FrameLayout mCustomViewContainer;
        private WebChromeClient.CustomViewCallback mCustomViewCallback;
        FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT,
                ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER);

        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {
            if (view instanceof FrameLayout) {
                wv = (WebView)findViewById(R.id.webViewTest);
                mCustomViewContainer = (FrameLayout) view;
                mCustomViewCallback = callback;
                mContentView = (LinearLayout)findViewById(R.id.rltvLayoutTest);
                if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
                    mVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
                    // frame.removeView(video);
                    mContentView.setVisibility(View.GONE);
                    mCustomViewContainer.setVisibility(View.VISIBLE);
                    setContentView(mCustomViewContainer);
                    mVideoView.setOnCompletionListener(this);
                    mVideoView.setOnErrorListener(this);
                    mVideoView.start();

                }
            }
        }

        public void onHideCustomView() {
            if (mVideoView == null)
                return;
            // Hide the custom view.
            mVideoView.setVisibility(View.GONE);
            // Remove the custom view from its container.
            mCustomViewContainer.removeView(mVideoView);
            mVideoView = null;
            mCustomViewContainer.setVisibility(View.GONE);
            mCustomViewCallback.onCustomViewHidden();
            // Show the content view.
            mContentView.setVisibility(View.VISIBLE);
        }


        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mCustomViewContainer.setVisibility(View.GONE);
            onHideCustomView();
            setContentView(mContentView);
        }

        public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
            setContentView(mContentView);
            return true;
        }
    }

解决方案

I used html5webview to solve this problem.Download and put it into your project then you can code just like this.

private HTML5WebView mWebView;
String url = "SOMEURL";
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mWebView = new HTML5WebView(this);
    if (savedInstanceState != null) {
            mWebView.restoreState(savedInstanceState);
    } else {
            mWebView.loadUrl(url);
    }
    setContentView(mWebView.getLayout());
}
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mWebView.saveState(outState);
}

To make the video rotatable, put android:configChanges="orientation" code into your Activity for example (Androidmanifest.xml)

<activity android:name=".ui.HTML5Activity" android:configChanges="orientation"/>

and override the onConfigurationChanged method.

@Override
public void onConfigurationChanged(Configuration newConfig) {
     super.onConfigurationChanged(newConfig);
}

阅读全文

相关推荐

最新文章