如何使用 Jetpack Glance 将互联网上的图像加载到小部件中?

Jél*_*chu 4 android kotlin android-jetpack-compose glance-appwidget

我有一个使用 Jetpack Compose 和 Jetpack Glance 库开发的小部件,该小部件是一个 LazyColumn 列表,我在向 Room Database 数据库进行查询后在其中传递信息。

在此输入图像描述

为了尝试加载图像,我将Image()提供程序一起使用,并向其传递一个字符串(这是我要加载的图像的 url)

Image(
   modifier = GlanceModifier.size(50.dp),
   provider = ImageProvider(item.image),
   contentDescription = null
)
Run Code Online (Sandbox Code Playgroud)

这没有加载图像,我尝试将该图像 url 传递给位图,以使用 BitmapImageProvider() 加载它,但它不起作用。有没有办法使用 Jetpack Glance 将远程图像加载到小部件?

Mar*_*cel 5

我建议检查ImageGlanceWidget 示例代码。该示例展示了如何使用 WorkManager 从网络加载图像并使用 URI 或位图来显示它们。

目前,使用 Glance/Widgets 加载图像和进行后台工作很棘手,但我们很快就会通过支持重组来改进这一点。

以下是 Glance 未来版本中的示例: https://gist.github.com/marcelpinto/6df5e3e6ca42c6a0bf34b9f4b6eb1cff

  • @Marcel我也使用您的示例代码得到“无法加载小部件”。UriImageProvider 中某处抛出一个无提示错误,当小部件尝试渲染时,该错误会导致小部件崩溃。它不是 Coil,因为 Coil 只是下载图像并将其保存到缓存(正确)。在 getImageProvider() 中,我必须替换实现以将位图传递给 ImageProvider 初始值设定项: ```val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, pathFromCoilDiskCache.toUri()) return ImageProvider(bitmap)` `` 希望 Glance 的未来版本尽快推出! (2认同)