android - Chromium webview 似乎不适用于 Android applyOverrideConfiguration

标签 android webview chromium

按照我在 Force locale for Android flavor with resConfig 中描述的更改我面临包含视频的 WebView 问题。该问题仅出现在 API21+ 上,并且在删除对 applyOverrideConfiguration 的调用时真正消失。不太确定如何解决这个问题。

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:1172)
  at org.chromium.android_webview.DefaultVideoPosterRequestHandler$1.run(DefaultVideoPosterRequestHandler.java:39)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:135)
  at android.app.ActivityThread.main(ActivityThread.java:5221)
  at java.lang.reflect.Method.invoke(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

根据我在 grepcode 上可以找到的内容,它会在获取 ic_media_video_poster 图像时发生。我验证了该图像确实在 sdk 中。 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.1_r1/com/android/webview/chromium/WebViewContentsClientAdapter.java#WebViewContentsClientAdapter.getDefaultVideoPoster%28%29

public Bitmap More ...getDefaultVideoPoster() {
     TraceEvent.begin();
     Bitmap result = null;
     if (mWebChromeClient != null) {
         if (TRACE) Log.d(TAG, "getDefaultVideoPoster");
         result = mWebChromeClient.getDefaultVideoPoster();
     }
     if (result == null) {
         // The ic_media_video_poster icon is transparent so we need to draw it on a gray
         // background.
         Bitmap poster = BitmapFactory.decodeResource(
                 mWebView.getContext().getResources(),
                 R.drawable.ic_media_video_poster);
         result = Bitmap.createBitmap(poster.getWidth(), poster.getHeight(), poster.getConfig());
         result.eraseColor(Color.GRAY);
         Canvas canvas = new Canvas(result);
         canvas.drawBitmap(poster, 0f, 0f, null);
     }
     TraceEvent.end();
     return result;
 }

编辑:经过更多测试后,我能够在 testApp 中隔离崩溃。它在我在 Chromium 上创建的错误报告中可用 ​​https://code.google.com/p/chromium/issues/detail?id=521753

有什么想法吗?因为有人已经遇到过这个问题吗?

最佳答案

作为@Martin Edlman commented ,它应该适用于此解决方法:

在 Kotlin 中:

override fun getAssets(): AssetManager {
    return resources.assets
}

在 Java 中:

@Override
public AssetManager getAssets() {
    return getResources().getAssets();
} 

关于android - Chromium webview 似乎不适用于 Android applyOverrideConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32050784/

相关文章:

macos - 为什么 Safari 和 WebView 组件之间的插件集可能不同?

android - Android KitKat 中的新 WebView 问题

javascript - V8 中的 Typeof 和 Expression*

css - 是否可以关闭 Chrome 中的所有 CSS 动画?

javascript - Chrome扩展程序桌面通知隐藏问题

java - 将毫秒格式化为 hh :mm:ss format

android - 目标主机不能为空,或在参数中设置

android - 等效于 ios 的 spongycaSTLe 加密

android - Android连接WIFI后如何通过移动网络保持连接?

android - 读取 webview 小部件的 HTML 内容