android4.0:在Fragment中播放优酷视频

来源:互联网 发布:java 断点 编辑:程序博客网 时间:2024/06/07 05:39

需求:在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;@Overridepublic 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_idvid是要访问的视频相关参数

0 0