/** * 添加直播組件 */ @SuppressLint("JavascriptInterface") private void addPlayerLive(final SubjectActivityModule.SubjectActivityBean bean) { playerLiveBean = bean.getPlayerLive(); View view = mInflater.inflate(R.layout.layout_subject_player, null); playerWebView = view.findViewById(R.id.wv_survey); String url = "file:///android_asset/apps/H5FF48005/www/view/artical/iframe.html"; // String url = playerLiveBean.getPlaySrc(); ImageView iv_default = view.findViewById(R.id.iv_default); WebChromeClient wvcc = new WebChromeClient(); WebSettings webSettings = playerWebView.getSettings(); webSettings.setJavaScriptEnabled(true); playerWebView.addJavascriptInterface(this, "android"); webSettings.setUseWideViewPort(true); // 關鍵點 webSettings.setAllowFileAccess(true); // 允許訪問文件 webSettings.setSupportZoom(true); // 支持縮放 webSettings.setDomStorageEnabled(true); //啟用或禁用DOM緩存。 webSettings.setLoadWithOverviewMode(true); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 不加載緩存內容 playerWebView.setVisibility(View.INVISIBLE); playerWebView.setWebChromeClient(wvcc); WebViewClient wvc = new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { playerWebView.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); iv_default.setVisibility(View.GONE); playerWebView.setVisibility(View.VISIBLE); } }; playerWebView.setWebViewClient(wvc); playerWebView.setWebChromeClient(new WebChromeClient() { /*** 視頻播放相關的方法 **/ @Override public View getVideoLoadingProgressView() { FrameLayout frameLayout = new FrameLayout(SubjectActivityDetailsActivity.this); frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return frameLayout; } @Override public void onShowCustomView(View view, CustomViewCallback callback) { showCustomView(view, callback); } @Override public void onHideCustomView() { hideCustomView(); } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); // if (newProgress==100){ // iv_default.setVisibility(View.GONE); // playerWebView.setVisibility(View.VISIBLE); // } } }); // 加載Web地址 playerWebView.loadUrl(url); ll_container.addView(view); setPlayerWebViewHeight(view); } private void setPlayerWebViewHeight(View view) { LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (UIUtils.getScreenWidth(this) * 0.5625)); view.setLayoutParams(layoutParams); } /** * 視頻播放全屏 **/ private void showCustomView(View view, WebChromeClient.CustomViewCallback callback) { // if a view already exists then immediately terminate the new one if (customView != null) { callback.onCustomViewHidden(); return; } setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); getWindow().getDecorView(); FrameLayout decor = (FrameLayout) getWindow().getDecorView(); fullscreenContainer = new FullscreenHolder(this); fullscreenContainer.addView(view, COVER_SCREEN_PARAMS); decor.addView(fullscreenContainer, COVER_SCREEN_PARAMS); customView = view; setStatusBarVisibility(false); customViewCallback = callback; } /** * 隱藏視頻全屏 */ private void hideCustomView() { if (customView == null || playerWebView == null) { return; } setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setStatusBarVisibility(true); FrameLayout decor = (FrameLayout) getWindow().getDecorView(); decor.removeView(fullscreenContainer); fullscreenContainer = null; customView = null; customViewCallback.onCustomViewHidden(); playerWebView.setVisibility(View.VISIBLE); } /** * 全屏容器界面 */ static class FullscreenHolder extends FrameLayout { public FullscreenHolder(Context ctx) { super(ctx); setBackgroundColor(ctx.getResources().getColor(android.R.color.black)); } @Override public boolean onTouchEvent(MotionEvent evt) { return true; } } private void setStatusBarVisibility(boolean visible) { int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: /** 回退鍵 事件處理 優先級:視頻播放全屏-網頁回退-關閉頁面 */ if (customView != null) { hideCustomView(); } else if (playerWebView != null && playerWebView.canGoBack()) { playerWebView.goBack(); } else { finish(); } return true; default: return super.onKeyUp(keyCode, event); } } /** * 供h5調用 返給h5視頻播放地址 */ @JavascriptInterface public String getPlayerLiveSrc() { if (playerLiveBean == null || TextUtils.isEmpty(playerLiveBean.getPlaySrc())) { return ""; } return playerLiveBean.getPlaySrc(); }