为什么在 Android P beta (DP2) 上忽略了 `onComputeColors`?

Why `onComputeColors` is being ignored on Android P beta (DP2)?

背景

我有一个使用相对较新的 API 的动态壁纸(从 Android 8.1 - API 26)请求 OS 使用自定义颜色:

问题

在 Android 8.1 上,甚至在 Android P DP1 上,所有这些功能都可以正常工作,因为它们可以像普通墙纸一样处理颜色,如果颜色是选择的颜色够深。下面是选择非深色和选择深色背景的对比:

事情是,在 Android P beta (DP2) 上,即使调用此函数,它也不会执行任何操作。

要自行测试,您可以尝试我发布的完整项目 here

我发现了什么

  1. 我想也许 API 已经改变了,所以我试图找到可用的功能,但我看不到任何新功能。

  2. 我试过各种方法来return自定义颜色:

    一个。 WallpaperColors(Color.valueOf(0xff000000.toInt()), Color.valueOf(0xff000000.toInt()), Color.valueOf(0xff000000.toInt()))

    b。 WallpaperColors.fromDrawable(ColorDrawable(0xff000000.toInt()))

    c。 WallpaperColors.fromDrawable(BitmapDrawable(completelyBlackBitmap))

    d。 WallpaperColors.fromBitmap(completelyBlackBitmap)

遗憾的是 none 有效(fromBitmap 在 Android 8.1 上运行良好)。

  1. 看到这里,我重新检查了我的代码是否正常,并注意到内置的动态壁纸工作正常,并且选择了纯黑色壁纸(而不是动态壁纸)影响了 OS 的 UI。

  2. 看到它适用于内置应用程序,我已经向 Google 报告了这个问题,结果发现他们不明白我在说什么,每次我试图告诉他们他们都以不同的方式误解了它:

  3. 我想确保这不仅仅是我的应用程序的问题,其他人也一样,所以我测试了 Muzei live wallpaper 应用程序,它实际上是由 Google自己的开发者。这个问题确实也在那里发生,而在 Android 8.1.

  4. 上工作正常
  5. 我只是好奇,想看看如果我将 Muzei 移动为系统应用程序是否会出现问题,但在这样做之后,我发现问题仍然存在。

问题

  1. 怎么没用了?

  2. 这个有workaround/fix吗?

  3. 为什么它适用于内置应用程序和普通壁纸,但不适用于第三方应用程序?我认为他们的代码没有任何区别。

好的,Google 确认这是一个错误,将在 later version:

上修复

The development team has fixed the issue that you have reported and it will be available in a future build.

而且,它现在在 Android P 的 DP4(测试版 3)上运行良好。