如何在jetpack compose中显示已安装的应用程序图标

时间:2021-07-10 17:38:26

标签: android android-jetpack android-jetpack-compose

在 jetpack compose 中,您可以像这样使用可组合的图像轻松显示可绘制对象:

Image(painter = painterResource(id = R.drawable.my_drawable))

我正在构建一个应用程序,需要列出设备上的所有应用程序,我需要显示它们的图标。我设法使用 PackageManager 类获取图标:

val packageManager = context.packageManager
val installedPackages = packageManager.getInstalledPackages(0)
val packageInfo = installedPackages[0]
val iconId: Int = packageInfo.applicationInfo.icon

那么:

Image(painter = painterResource(id = iconId))

但应用程序每次都崩溃。不知道问题出在哪里?任何的想法?谢谢

android.content.res.Resources$NotFoundException: Resource ID #0x7f030001

1 个答案:

答案 0 :(得分:1)

出于某种原因,icon 可能包含指向不存在的可绘制对象的标识符。

要获取应用程序图标,请使用方法 loadIcon

val icon: Drawable = applicationInfo.loadIcon(packageManager)

或来自 PackageManager 的方法 getApplicationIcon

val icon: Drawable = packageManager.getApplicationIcon(applicationInfo)

然后,使用 AndroidDrawablePainter 将 Drawable 转换为 Painter:

Image(painter = AndroidDrawablePainter(icon))

或者 DrawablePainteraccompanist 库中可用:

Image(painter = DrawablePainter(icon))