第一和前段交互做视频的播放记录一下。需求:前段播放视频 可以全屏点击,点击全屏按钮原生横屏,点击取消横屏原生竖屏。
问题:一开始做的时候因为对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注入回调的方式也就是调用安卓原生方法,不过麻烦的就是自定义做的全屏事件隐藏的很深。