WebView加载H5视频的问题总结

    xiaoxiao2022-07-02  107

     

    1.全屏显示

    2.自动播放

     

    布局省略, 页面就一个WebView控件

    private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mWebView = findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setPluginState(WebSettings.PluginState.ON); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // 设置是否需要用户手势来播放媒体 api=17 webSettings.setMediaPlaybackRequiresUserGesture(false); } // 不加载缓存内容 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { mWebView.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { // 视频加载后自动播放 mWebView.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); } }); mWebView.setWebChromeClient(new WebChromeClient() { private View customView; private FrameLayout fullscreenContainer; private CustomViewCallback customViewCallback; // 视频全屏参数 private final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); /** * 视频全屏播放 */ @Override public void onShowCustomView(View view, CustomViewCallback callback) { // 视频时, 保持屏幕高亮, 不锁屏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 横屏显示, 但可根据物理方向传感器来切换正反向的横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); if (customView != null) { callback.onCustomViewHidden(); return; } getWindow().getDecorView(); FrameLayout decor = (FrameLayout) getWindow().getDecorView(); fullscreenContainer = new FrameLayout(Main2Activity.this); fullscreenContainer.setBackgroundColor(Color.BLACK); fullscreenContainer.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); fullscreenContainer.addView(view, COVER_SCREEN_PARAMS); decor.addView(fullscreenContainer, COVER_SCREEN_PARAMS); customView = view; getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); customViewCallback = callback; } /** * 隐藏全屏视频 */ @Override public void onHideCustomView() { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); if (customView == null) { return; } getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_FULLSCREEN); FrameLayout decor = (FrameLayout) getWindow().getDecorView(); decor.removeView(fullscreenContainer); fullscreenContainer = null; customView = null; customViewCallback.onCustomViewHidden(); mWebView.setVisibility(View.VISIBLE); } }); // 加载Web地址 mWebView.loadUrl("url"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // 返回前一个页面 mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override protected void onDestroy() { if (mWebView != null) { mWebView.removeAllViews(); mWebView.destroy(); } super.onDestroy(); }

     

    相关资料参考:

    Auto play video in webview

     

     

     

     

     

    最新回复(0)