显示youtube视频时Webview崩溃

bre*_*ine 1 android webview android-8.0-oreo

更新到8.0之后,到目前为止我们都没有见过崩溃:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
                                                                 at com.android.webview.chromium.WebViewContentsClientAdapter.getDefaultVideoPoster(WebViewContentsClientAdapter.java:536)
                                                                 at org.chromium.android_webview.DefaultVideoPosterRequestHandler$1.run(DefaultVideoPosterRequestHandler.java:2)
                                                                 at android.os.Handler.handleCallback(Handler.java:789)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                 at android.os.Looper.loop(Looper.java:164)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Run Code Online (Sandbox Code Playgroud)

这是Chrome中的错误吗?

Boy*_*Boy 7

感谢@breakline的回答,我解决了这个问题!谢谢!但是,我没有使用解码位图,而是创建了一个空的位图并返回:

    setWebChromeClient(new WebChromeClient() {
        @Override
        public Bitmap getDefaultVideoPoster() {
            return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
        }
    });
Run Code Online (Sandbox Code Playgroud)


bre*_*ine 5

仍然有人想知道而不是在这里投票是对此的实际解决方法。由于我花了很多时间在此发布,因此将其发布在这里。

您需要将以下内容添加到WebChromeClient中:

webview.setWebChromeClient(new WebChromeClient() {
        @Override
        public Bitmap getDefaultVideoPoster() {
            Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.black);
            return icon;
        }
    });
Run Code Online (Sandbox Code Playgroud)

只要它是实际的PNG文件,任何drawable都可以。如果使用drawable / xml,您仍然会遇到异常。