android 中 h5頁面無法全屏播放視頻怎么辦


來咱們 一步一步的配置的哈

需要在AndroidManifest.xml文件中聲明需要使用HardwareAccelerate務必強制打開硬件加速,否則只有聲音沒有畫面,因為在Android 5的部分rom上默認關閉硬件加速的,此時需要強制打開硬件加速。
方式一:聲明整個應用都需要加速:

< application ... android:hardwareAccelerated ="true">

方式二:在Activity中聲明:

<activity ... android:hardwareAccelerated="true" > 

硬件加速配置好后,添加android:configChanges配置
webView所在的Activity添加如下配置,不添加無法全屏播放。

...
android:configChanges="orientation|screenSize|keyboardHidden"
...

權限記得添加

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

二、webView控件所在的xml文件內容

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mFrameLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/mWebView" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

三、Activity中初始化webView

1.去掉標題,否則可能導致無法全屏;
2.初始布局中的兩個控件;
3.webView一些簡單初始化和配置,根據需求靈活修改;

class MyActivity extends Activity { ... private FrameLayout mFrameLayout; private WebView mWebView; private InsideWebChromeClient mInsideWebChromeClient; //private JavascriptInterface javascriptInterface; private String URL = "改成自己需要測試的H5網頁"; @Override protected void onCreate(Bundle saveInstanceState) { // 1 requestWindowFeature(Window.FEATURE_NO_TITLE); // 2 mFrameLayout = (FrameLayout) findViewById(R.id.mFrameLayout); mWebView = (WebView) findViewById(R.id.mWebView); // 3 initWebView(); mWebView.loadUrl(URL); } private void initWebView() { WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setPluginState(WebSettings.PluginState.ON); //settings.setPluginsEnabled(true); settings.setAllowFileAccess(true); settings.setLoadWithOverviewMode(true); settings.setUseWideViewPort(true); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setCacheMode(WebSettings.LOAD_DEFAULT); mInsideWebChromeClient = new InsideWebChromeClient(); InsideWebViewClient mInsideWebViewClient = new InsideWebViewClient(); //javascriptInterface = new JavascriptInterface(); //mWebView.addJavascriptInterface(javascriptInterface, "java2js_laole918"); mWebView.setWebChromeClient(mInsideWebChromeClient); mWebView.setWebViewClient(mInsideWebViewClient); } } 

四、自定義WebChromeClient

步驟三種mInsideWebChromeClient = new InsideWebChromeClient();初始化的是自定義的WebChromeClient類,這里就開始創建該類

思路:在onShowCustomView方法中,講獲取到的view放到當前Activity的最上方,在onHideCustomView中,將之前的view隱藏或者刪除,將原來被覆蓋的webview放回來。並結束播放。

public Class MyActivity extends Activity { ... private class InsideWebChromeClient extends WebChromeClient { private View mCustomView; private CustomViewCallback mCustomViewCallback; @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); if (mCustomView != null) { callback.onCustomViewHidden(); return; } mCustomView = view; mFrameLayout.addView(mCustomView); mCustomViewCallback = callback; mWebView.setVisibility(View.GONE); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } public void onHideCustomView() { mWebView.setVisibility(View.VISIBLE); if (mCustomView == null) { return; } mCustomView.setVisibility(View.GONE); mFrameLayout.removeView(mCustomView); mCustomViewCallback.onCustomViewHidden(); mCustomView = null; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.onHideCustomView(); } } ... } 

五、自定義WebViewClient,在Activity內部類。

重寫WebViewClientonPageFinished()方法中可以注入JS語句。按需求添加。

... private class InsideWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //mWebView.loadUrl(javascript); } } ... 

六、在Activity中復寫onConfigurationChanged方法

... @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); switch (config.orientation) { case Configuration.ORIENTATION_LANDSCAPE: getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); break; case Configuration.ORIENTATION_PORTRAIT: getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); break; } } 

七、Activity聲明周期內webView的操作

... @Override public void onPause() { super.onPause(); mWebView.onPause(); } @Override public void onResume() { super.onResume(); mWebView.onResume(); } @Override public void onBackPressed() { if (mWebView.canGoBack()) { mWebView.goBack(); return; } super.onBackPressed(); } @Override public void onDestroy() { mWebView.destroy(); super.onDestroy(); } ... 

思路:在onShowCustomView方法中,講獲取到的view放到當前Activity的最上方,在onHideCustomView中,將之前的view隱藏或者刪除,將原來被覆蓋的webview放回來。並結束播放。


八、沒有正確全屏可能的原因

點擊全屏按鈕后,寬度拉寬了,高度也高了,但是可以上下滑動,看起來像是一個橫屏的網頁,這是偽全屏。

 
 

1.檢查 AndroidManifest.xml清單文件, WebView控件所在的 Activity配置信息是否添加 android:configChanges或者是否 orientation, screenSize, keyboardHidden寫全了。我之前就是忘記寫了個 screenSize參數,點擊視頻全屏按鈕后,是一個偽全屏。還可以上下滑動呢。

 

## 犯錯的錯誤寫成了如下:
android:configChanges="orientation|keyboardHidden" -->
## 正確的寫法:
android:configChanges="orientation|screenSize|keyboardHidden"

2.檢查Activity的主題是否NoActionBar了。


小技巧:html5測試的URL獲取

打開搜狐,播放一個視頻,查看源代碼,查找以下代碼,url就是html5。

<meta name="mobile-agent" content="format=html5;url=http://m.tv.sohu.com/20140508/n399272261.shtml"> 

最后

  1. 不懂得可以私信我,我會在第一時間回復。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM