安卓和前段互動——視訊播放video標籤橫豎屏
阿新 • • 發佈:2019-02-05
第一和前段互動做視訊的播放記錄一下。需求:前段播放視訊 可以全屏點選,點選全屏按鈕原生橫屏,點選取消橫屏原生豎屏。
問題:一開始做的時候因為對webview的WebChromeClient裡面的方法瞭解的不全面,所以想到的第一種方案就是讓前段監聽全屏按鈕的點選事件當全屏時候呼叫原生我設定好的橫屏方法,豎屏也是如此,可是問題就是前段使用的外掛找不到全屏按鈕事件。
解決: 後來通過前段人員和他認識的朋友打聽類似功能的做法得到的資訊就是可以通過video標籤 實現和安卓的互動,然後我又到網上查找了相關的程式碼和資料,果然有和onShowFileChooser()類似的方法。
WebChromeClient內的重寫方法:
//用於和video標籤 全屏按鈕的 監聽 點選全屏按鈕 @Override public void onShowCustomView(View view, CustomViewCallback callback) { Log.e("Media", "onShowCustomView ............ "); if (makePhotoUtils!=null){ makePhotoUtils.setFullScreen(); } if (myCallback != null) { myCallback.onCustomViewHidden(); myCallback = null; Log.e("Media", "myCallback.onCustomViewHidden()..."); return; } long id = Thread.currentThread().getId(); if (makePhotoUtils==null) return; ViewGroup parent = (ViewGroup) makePhotoUtils.webView.getParent(); String s = parent.getClass().getName(); Log.v("WidgetChromeClient", "rong debug Ex: " + s); parent.removeView(makePhotoUtils.webView); parent.addView(view); myView = view; myCallback = callback; } private View myView = null; private CustomViewCallback myCallback = null; //用於和video標籤 全屏按鈕的 監聽 點選關閉全屏按鈕 @Override public void onHideCustomView() { long id = Thread.currentThread().getId(); Log.v("Media", "onrong debug in hideCustom Ex: " + id); if (makePhotoUtils!=null){ makePhotoUtils.setNoFullScreen(); } if (myView != null) { if (myCallback != null) { myCallback.onCustomViewHidden(); myCallback = null; } ViewGroup parent = (ViewGroup) myView.getParent(); parent.removeView(myView); parent.addView(makePhotoUtils.webView); myView = null; } }
onShowCustomView()是執行全屏的操作,onHideCustomView()執行取消全屏的操作,這是針對前段的來,這兩個方法的回撥不包含橫豎屏的操作,所以就需要我們自己加上橫豎屏操作即可。
注意橫屏操作時候有標題欄隱藏標題欄。
補充:前段頁面視訊播放的全屏事件監聽 ,只有h5自帶的全屏功能可以用WebChromeClient的方法監聽到,像一些外掛是自己做的全屏功能就不行,這時候就需要js注入回撥的方式也就是呼叫安卓原生方法,不過麻煩的就是自定義做的全屏事件隱藏的很深。