Android編程使WebView支持HTML5 Video全屏播放的解決方法
本文實(shí)例講述了Android編程使WebView支持HTML5 Video全屏播放的解決方法。分享給大家供大家參考,具體如下:
1)需要在AndroidManifest.xml文件中聲明需要使用HardwareAccelerate, 可以細(xì)化到Activity級(jí)別,如果不需要的View可以聲明不要用加速,但是需要在代碼中做,具體如下:
a. 如果要聲明整個(gè)應(yīng)用都要加速:
b. 如果要在Activity中聲明,則:
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
c. 如果application或者activity都申明了要硬件加速,但是為了某些原因(比如省電?),一些View不需要硬件加速的話,
2)可以說(shuō)挺奇怪的是,需要在AndroidManifest.xml文件中用上<use-sdk></use-sdk>標(biāo)簽,而且如果是空的還不行,必須寫(xiě)上targetSDK或者minSDK,但是我試驗(yàn)過(guò),不管寫(xiě)版本是多少都沒(méi)有關(guān)系。。。理論上說(shuō),Android應(yīng)該是從3.0( API Level 11)開(kāi)始可以對(duì)2D渲染加速,但是我把targetSDK設(shè)置為5都可以使用的,但是這個(gè)標(biāo)簽不寫(xiě)還不行。
一般來(lái)說(shuō),上面的操作做了,就可以使用video標(biāo)簽播放視屏了,如果要支持全屏,還需要做一點(diǎn)操作:
1)給webview一個(gè)WebChromeClient對(duì)象,這個(gè)WebChromeClient對(duì)象需要實(shí)現(xiàn)onShowCustomView和onHideCustomView方法,下面是一個(gè)實(shí)現(xiàn)例子:
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (myCallback != null) {
myCallback.onCustomViewHidden();
myCallback = null ;
return;
}
long id = Thread.currentThread().getId();
WrtLog. v("WidgetChromeClient", "rong debug in showCustomView Ex: " + id);
ViewGroup parent = (ViewGroup) mWebView.getParent();
String s = parent.getClass().getName();
WrtLog. v("WidgetChromeClient", "rong debug Ex: " + s);
parent.removeView( mWebView);
parent.addView(view);
myView = view;
myCallback = callback;
chromeClient = this ;
}
private View myView = null;
private CustomViewCallback myCallback = null;
public void onHideCustomView() {
long id = Thread.currentThread().getId();
WrtLog. v("WidgetChromeClient", "rong debug in hideCustom Ex: " + id);
if (myView != null) {
if (myCallback != null) {
myCallback.onCustomViewHidden();
myCallback = null ;
}
ViewGroup parent = (ViewGroup) myView.getParent();
parent.removeView( myView);
parent.addView( mWebView);
myView = null;
}
}
好吧,這個(gè)寫(xiě)法和網(wǎng)上很多寫(xiě)法不一樣,網(wǎng)上大部分的例子都是onShowCustomView方法接收到的view是一個(gè)VideoView對(duì)象,而這里是一個(gè)找不到的HTML5VideoFullScreen的VideoSurfaceView子類,而且這個(gè)子類還是一個(gè)private的子類,在外面根本沒(méi)有辦法訪問(wèn)到,android.jar中也沒(méi)有HTML5VideoFullScreen這個(gè)類。如果想要在application中訪問(wèn)到這個(gè)類,那么需要把<android-SDK-path>/platforms/<android-version>/data/layoutlib.jar這個(gè)包加到buildpath中,而且從android-14,也就是android4.0以后才這樣,也就是說(shuō),網(wǎng)上說(shuō)的那個(gè)方法在android3.0時(shí)代是可以用的,android4.0以后就不行了,我用的是android4.0.3。
其實(shí)不管是什么版本,這個(gè)段代碼的大概意思就是,在onShowCustomView方法中,將獲取到的view放到當(dāng)前Activity的最上方,在onHideCustomView中,將之前的view隱藏或者刪除,將原來(lái)被覆蓋的webview放回來(lái),并結(jié)束播放,否在會(huì)報(bào)MediaPlayer IllegalStatusException, 而且還是Native method,根本沒(méi)法調(diào)試了。
上面代碼是片段,很多朋友看了也不能解決問(wèn)題,完整實(shí)例代碼代碼點(diǎn)擊此處本站下載。
可以下載下來(lái),用eclipse導(dǎo)入工程,把樣例視頻放到sdcard根部目錄下,從系統(tǒng)角度看就是/mnt/sdcard即可。
效果如圖:
全屏前:

全屏后:

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android如何讓W(xué)ebView中的HTML5頁(yè)面實(shí)現(xiàn)視頻全屏播放
- Android編程實(shí)現(xiàn)WebView全屏播放的方法(附源碼)
- Android使用WebView播放flash的方法
- Android WebView與JS交互全面詳解(小結(jié))
- 詳解android 用webview加載網(wǎng)頁(yè)(https和http)
- Android webview如何加載HTML,CSS等語(yǔ)言的示例
- Android Webview與ScrollView的滾動(dòng)兼容及留白處理的方法
- Android關(guān)于WebView中無(wú)法定位的問(wèn)題解決
- Android開(kāi)發(fā)實(shí)現(xiàn)webview中img標(biāo)簽加載本地圖片的方法
- Android studio點(diǎn)擊跳轉(zhuǎn)WebView詳解
- 詳解android webView獨(dú)立進(jìn)程通訊方式
- Android使用WebView實(shí)現(xiàn)全屏切換播放網(wǎng)頁(yè)視頻功能
相關(guān)文章
Android 靜默安裝和智能安裝的實(shí)現(xiàn)方法
靜默安裝就是無(wú)聲無(wú)息的在后臺(tái)安裝apk,沒(méi)有任何界面提示。智能安裝就是有安裝界面,但全部是自動(dòng)的,不需要用戶去點(diǎn)擊。下面腳本之家小編給大家介紹下Android 靜默安裝和智能安裝的實(shí)現(xiàn)方法,感興趣的朋友一起看看吧2018-01-01
Android學(xué)習(xí)之文件存儲(chǔ)讀取
本節(jié)給大家介紹的是Android數(shù)據(jù)存儲(chǔ)與訪問(wèn)方式中的一個(gè)——文件存儲(chǔ)與讀寫(xiě),當(dāng)然除了這種方式外,我們可以存到SharedPreference,數(shù)據(jù)庫(kù), 或者ContentProvider中,當(dāng)然這些后面都會(huì)講,嗯,開(kāi)始本文內(nèi)容~2016-07-07
Android 實(shí)現(xiàn)九宮格抽獎(jiǎng)功能
這篇文章主要介紹了Android 實(shí)現(xiàn)九宮格抽獎(jiǎng)功能,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03
android自定義彈出框樣式的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了android自定義彈出框樣式的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Android 事件觸發(fā)機(jī)制的深入學(xué)習(xí)
這篇文章主要介紹了 Android 事件觸發(fā)機(jī)制的深入學(xué)習(xí)的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android多進(jìn)程間采用AIDL方式進(jìn)行通信
這篇文章主要為大家詳細(xì)介紹了Android多進(jìn)程間采用AIDL方式進(jìn)行通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Android編程程序?qū)崿F(xiàn)一鍵鎖屏的方法講解
今天小編就為大家分享一篇關(guān)于Android編程程序?qū)崿F(xiàn)一鍵鎖屏的方法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
android中Invalidate和postInvalidate的更新view區(qū)別
Android中實(shí)現(xiàn)view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI線程自身中使用,而后者在非UI線程中使用,感興趣的朋友可以了解下哦2013-01-01

