需求:在android4.0的Fragment(android.support.v4.app.Fragment)内,使用WebView播放Html内嵌的优酷网络视频.WebView是固定大小的窗口而非全屏,整个Html中只有一个视频,没有其他的网页内容.
涉及知识点:
1、 视频退出。
2、 点击Html视频的全屏切换按钮切换全屏。
问题:
1、 视频退出时声音还在继续。
使用WebView的中的onPause()和onResume()进行控制,在Fragment暂停和开始的时候控制视频的结束和开始。需要用到反射,因为WebView并未暴露这两个方法。
onResume():
try {
wb_video.getClass().getMethod("onResume")
.invoke(wb_video, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
onPause():
try {
wb_video.getClass().getMethod("onPause")
.invoke(wb_video, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
2、 点击Html视频的全屏切换按钮切换全屏实现。
视频全屏按钮是由Html自带的jsp控制的。点击全屏按钮如何在java代码中进行响应。
首先要给WebView设置支持js支持:
WebSettings settings = wb_video.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
响应js支持还需要设置WebChromeClient。自定义一个WebChromeClient的子类,然后重写两个方法:
onShowCustomView()和onCustomViewHidden()
onShowCustomView()是点击全屏按钮时调用的,退出全屏使用该方法形参中的CustomViewCallback调用onCustomViewHidden。
class MyWebChromeClient extends WebChromeClient {
private CustomViewCallback mCustomViewCallback;
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (mCustomView != null) {
Log.i(TAG, "1");
callback.onCustomViewHidden();
return;
}
mFullscreenContainer.addView(view);
mCustomView = view;
mCustomViewCallback = callback;
mDefaultContainor.setVisibility(View.INVISIBLE);
mFullscreenContainer.setVisibility(View.VISIBLE);
mFullscreenContainer.bringToFront();
((HomeActivity) getActivity()).fullScreen(true);
getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
super.onShowCustomView(view, callback);
}
public void onHideCustomView() {
mDefaultContainor.setVisibility(View.VISIBLE);
if (mCustomView == null) {
return;
}
mCustomView.setVisibility(View.GONE);
mFullscreenContainer.removeView(mCustomView);
mCustomView = null;
mFullscreenContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
((HomeActivity) getActivity()).fullScreen(false);
getActivity().setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
最后
,
清单文件对应的
Activity
节点下
,
设置切换
Activity
不销毁重建的属性:
android:configChanges="orientation|keyboardHidden|screenSize"
注意:网上一般没有screenSize, 网但是在高版本的android系统里,不加不行。
<html>
<body>
<div id="youkuplayer" style="width:100%;height:100%"></div>
<script type="text/javascript" src="http://player.youku.com/jsapi">player = new YKU.Player('youkuplayer',{styleid: '0',client_id: '989dad16ab4bebab',vid: 'XNzc5MTMyOTg0'});
</script>
</body>
</html>
client_id和vid是要访问的视频相关参数