我试图在WebView中播放视频(非Youtube或Vimeo)。我加载一个HTML文件,它运行一些Javascript来生成html5视频标签和控制它的方法。在Kitkat,一切正常,但我在支持Jellybean方面遇到了麻烦。
应该按时调用的javascript函数根本不会在Jellybean中被调用。然而,我可以忍受这个。主要问题是当我使用mWebView.loadUrl发送命令时(" javascript:video.play();");这种行为是僵硬的。有时它会完全忽略命令,有时它会捕获它,但不是像Kitkat那样恢复暂停的视频,而是从头开始重新启动视频。事实上,它每次都没有以相同的方式做出反应,这让我想知道操作系统的视频播放器是否会受到影响,或者我是否需要强调正确的元素。初始播放命令总是有效,但在视频开始播放和onShowCustomView()调用后,一切都会变坏。
在Kitkat中,视频只是在WebView中加载,但在Jellbean上,除非我创建自定义的WebChromeClient并处理onShowCustomView()中调用的视图,否则什么都不会显示。这给了我另一个视图对象(除了WebView),可能我处理得很差。我一直在阅读文档,但我仍然对我为什么要调用onShowCustomView()非常不了解(我非常高兴能在Kitkat上单独使用Webview中的所有内容),所以它&#39我不应该对它给我的观点做些什么。我知道这是实际显示视频的视图。
我几天来一直撞着这堵墙,感谢任何帮助或线索。
这里是onShowCustomView()
的代码 // Need custom ChromeClient since android < 19
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
ViewGroup.LayoutParams webViewSize = mWebView.getLayoutParams();
FrameLayout frameLayout = (FrameLayout) view;
SurfaceView focusedChild = (SurfaceView) frameLayout.getFocusedChild();
frameLayout.removeAllViews();
mWebView.addView(focusedChild, webViewSize);