【轉】Android WebView 播放視頻總結


 

今天發現 WebView里播放優酷的視頻點擊播放按鈕后沒反應,於是看官方文檔和搜索解決,下面是我在別人基礎上做的補充:
 
android webView 無法播放視頻,無法暫停,繼續播放視頻問題,無法根據瀏覽器居中顯示內容問題
 
此次遇到一個問題就是webView無法播放視頻,查了下谷歌發現可以設置

setting.setPluginsEnabled(true); (從API 11 支持,可以不加)
這個從而播放視頻,但是最新官方SDK說這個方法要放棄了,推薦使用

setting.setPluginState(PluginState.ON);(從API 11 支持,可以不加)
目前看來這兩種方法都可以,但是webview的頁面都finish了居然還能聽到視頻播放的聲音,於是有查了下發現webview的

onResume方法可以繼續播放,

onPause可以暫停播放,
但是這兩個方法都是在Added in API level 11添加的,所以需要用反射來完成。
停止播放:在頁面的onPause方法中使用:

webView.getClass().getMethod("onPause").invoke(webView,(Object[])null);(低版本測試正常)
繼續播放:在頁面的onResume方法中使用:

 

webView.getClass().getMethod("onResume").invoke(webView,(Object[])null);(低版本測試正常)

這樣就可以控制視頻的暫停和繼續播放了。


另外說一點:

webView.resumeTimers()(不靠譜)

webView.pauseTimers();(不靠譜)

這兩個方法有延遲,而且第二次再加載webview以后會出現上次播放的視頻還會繼續在播放,但是只能聽到聲音,所以個人感覺不靠譜,系統的瀏覽器估計是用了這個方法,按返回件關閉瀏覽器后都還能聽到聲音。

 

無法根據瀏覽器居中顯示內容這個問題只要設置下面兩個熟悉即可:

 

setting.setLoadWithOverviewMode(true);

setting.setUseWideViewPort(true);

 

繼續研究:

同樣的代碼,經過在Android4.0+的設備上測試后發現,還是不能播放視頻,於是繼續添加了如下解決方法:

1.在webView的Activity配置里面加上:

android:hardwareAccelerated="true" 

(官方文檔解釋說:

Hardware acceleration is enabled by default if your Target API level is >=14 

http://developer.android.com/guide/topics/graphics/hardware-accel.html 

所以只需要修改下Manifest文件,不需要設置這個屬性也可以)


2.必須添加這句代碼,沒整明白為什么,但是加了這個就能播放

webView.setWebChromeClient(new WebChromeClient()); (一定要加)

這兩步就可以播放了,有人說在application的配置里面也要加上:android:hardwareAccelerated="true",開始的時候我也加了,但是后來發現去掉這個也一樣可以播放flash

但是現在的麻煩是視頻不能全屏播放,只要點擊了全屏按鈕后,再次點擊播放和暫停按鈕以后,視頻不會有任何反應,無法繼續播放了。

網上查了下相關解決方法:
http://www.techfreestyle.com/fixed-android-4-0-full-screen-flash-problem-in-webview  這種方法測試過了 不能解決問題。

https://github.com/android/platform_packages_apps_browser/blob/master/src/com/android/browser/BaseUi.java 這個貌似源碼,由於代碼較多,所以還沒研究。

 


免責聲明!

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



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