【问题标题】:Chromium webview does not seems to work with Android applyOverrideConfigurationChromium webview 似乎不适用于 Android applyOverrideConfiguration
【发布时间】:2015-08-17 12:45:04
【问题描述】:

根据Force locale for Android flavor with resConfig 中的更改描述,我遇到了包含视频的网络视图问题。该问题仅在 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 上创建的错误报告中找到

有什么想法吗?有人遇到过这个问题吗?

【问题讨论】:

标签: android webview chromium


【解决方案1】:

作为@Martin Edlman commented,它应该可以使用此解决方法:

在 Kotlin 中:

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

在 Java 中:

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

【讨论】:

  • 多么奇怪的错误。我不明白为什么铬首先制造了这个错误。
  • 哇,它真的解决了这个问题!对我来说,当我将一个相对简单的应用程序升级到 AndroidX 时发生了这个问题 - 将上述内容添加到 Activity 类清除了崩溃。
【解决方案2】:

为了未来;你可以试试我自己的实现。将以下代码添加到您的 CustomChromeClient;

@Nullable
@Override
public Bitmap getDefaultVideoPoster() {
    if (super.getDefaultVideoPoster() == null) {
        return BitmapFactory.decodeResource(context.getResources(),
                R.drawable.ic_launcher);
    } else {
        return super.getDefaultVideoPoster();
    }
}

【讨论】:

  • 有效吗?或者我们如何执行 try and catch fot 这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2020-04-04
  • 2023-04-06
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多