如何在 webview 中禁用与 html5 视频的交互或正确捕获它们的异常?

Posted

技术标签:

【中文标题】如何在 webview 中禁用与 html5 视频的交互或正确捕获它们的异常?【英文标题】:How to disable interaction with html5 videos in webview or properly catch their exceptions? 【发布时间】:2012-12-03 20:57:39 【问题描述】:

我有带有 webview 的应用程序,我使用 ACRA。我收到来自用户的崩溃报告,其中包含与 html5Video 交互导致的错误。

错误 1:

"java.lang.NullPointerException
    at android.webkit.HTML5VideoViewProxy$VideoPlayer.exitFullScreenVideo(HTML5VideoViewProxy.java:180)
    at android.webkit.HTML5VideoViewProxy.exitFullScreenVideo(HTML5VideoViewProxy.java:770)
    at android.webkit.WebViewClassic$PrivateHandler.handleMessage(WebViewClassic.java:7422)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5039)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)"

错误 2:

"java.lang.NullPointerException
    at android.webkit.HTML5VideoFullscreen.switchProgressView(HTML5VideoFullscreen.java:455)
    at android.webkit.HTML5VideoView.enterFullscreenVideoState(HTML5VideoView.java:546)
    at android.webkit.HTML5VideoViewProxy$VideoPlayer.enterFullscreenVideo(HTML5VideoViewProxy.java:182)
    at android.webkit.HTML5VideoViewProxy.handleMessage(HTML5VideoViewProxy.java:479)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:155)
    at android.app.ActivityThread.main(ActivityThread.java:5485)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
    at dalvik.system.NativeStart.main(Native Method)"

如果需要,这是我的 DropBox 日志:

对于错误 1:http://pastebin.com/w8G1UJvG

似乎很有趣:

11-14 22:19:29.912 E/libEGL  (14744): call to OpenGL ES API with no current context (logged once per thread)
11-14 22:19:29.917 W/dalvikvm(14744): threadid=1: thread exiting with uncaught exception (group=0x40d4a2d0)

对于错误 2:http://pastebin.com/8BEK1vAm

似乎很有趣:

12-10 00:14:52.542 W/YourLogTag(24823): Couldn't find activity to view mimetype: video/x-m4v

事实上,我什至不建议在我的 web 视图中与 HTML5 视频进行交互。我想,用户从页面打开它们,也没有提供与之交互。此外,我认为尝试禁止用户与其他网页交互是一种不好的方式(对于我的应用程序可能真的很难)。而且,当崩溃对话框出现在他面前时,用户绝对不会对我的应用程序感到温暖......

所以我想在我的 web 视图中阻止用户与 HTML5 视频的交互,或者只是正确捕获异常(似乎不是很好的方法)。最好的方法是什么?

如果需要,这是我的 webview 设置:

webView.getSettings().setjavascriptEnabled(false);
webView.getSettings().setUserAgentString("Some user agent"); 

【问题讨论】:

有趣。与哪些 Android 平台有关系吗? @Jay 4.1.1, 4.1.2, 4.2.1 【参考方案1】:

很遗憾,我无法提供直接的答案,但是,我确实找到了一个有趣的帖子,引发了很多讨论。 WebView and HTML5 Video

这是一个老问题,但您会注意到,随着时间的推移,越来越新的答案被发布,允许 HTML5 视频工作。希望阅读其中的一些答案能让您走上正轨,并最终让它为您服务。

我还找到了一个开源项目,它为您解决了这个问题......但是它已经过时并且不适用于 4.0 及更高版本。 HTML5 WebView

【讨论】:

谢谢,我已经阅读了那个帖子,但是那里提到的解决方案对于我的情况来说似乎过于强大了,因为我实际上并不需要 html5 来工作。

以上是关于如何在 webview 中禁用与 html5 视频的交互或正确捕获它们的异常?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android WebView 中拦截 HTML5 视频源请求

html5视频无法与android webview一起使用

如何修复在flutter webview中无法访问视频流(NotAllowedError)以使用html5 + webRTC相机api?

Flutter:如何在 webview 中阻止全屏视频?

Android WebView 播放 HTML5/h.264/mp​​4 视频,如何进入 MediaPlayer

如何在Firefox中禁用html5视频中的“画中画”