您好,登錄后才能下訂單哦!
這篇文章主要介紹Android中如何使WebView支持HTML5 Video全屏播放,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
1)需要在AndroidManifest.xml文件中聲明需要使用HardwareAccelerate, 可以細(xì)化到Activity級(jí)別,如果不需要的View可以聲明不要用加速,但是需要在代碼中做,具體如下:
a. 如果要聲明整個(gè)應(yīng)用都要加速:
< application ... android:hardwareAccelerated ="true">
b. 如果要在Activity中聲明,則:
<activity ... android:hardwareAccelerated="true" >, 還可以更細(xì)化到Window, getWindow.setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
c. 如果application或者activity都申明了要硬件加速,但是為了某些原因(比如省電?),一些View不需要硬件加速的話,
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
2)可以說(shuō)挺奇怪的是,需要在AndroidManifest.xml文件中用上<use-sdk></use-sdk>標(biāo)簽,而且如果是空的還不行,必須寫上targetSDK或者minSDK,但是我試驗(yàn)過(guò),不管寫版本是多少都沒(méi)有關(guān)系。。。理論上說(shuō),Android應(yīng)該是從3.0( API Level 11)開(kāi)始可以對(duì)2D渲染加速,但是我把targetSDK設(shè)置為5都可以使用的,但是這個(gè)標(biāo)簽不寫還不行。
一般來(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è)寫法和網(wǎng)上很多寫法不一樣,網(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)試了。
可以下載下來(lái),用eclipse導(dǎo)入工程,把樣例視頻放到sdcard根部目錄下,從系統(tǒng)角度看就是/mnt/sdcard即可。
效果如圖:
全屏前:
全屏后:
以上是“Android中如何使WebView支持HTML5 Video全屏播放”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。