如何在 Jetpack Compose 中显示已安装的应用程序图标
How to display installed app icon in jetpack compose
在 Jetpack Compose 中,您可以像这样使用 Image 可组合项轻松显示可绘制对象:
Image(painter = painterResource(id = R.drawable.my_drawable))
我正在构建一个需要列出设备上所有应用程序的应用程序,并且我需要显示它们的图标。我设法使用 PackageManager
class:
获取图标
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
出于某种原因 icon
可能包含指向不存在的可绘制对象的标识符。
获取应用程序图标使用方法loadIcon
:
val icon: Drawable = applicationInfo.loadIcon(packageManager)
或来自 PackageManager 的方法 getApplicationIcon
:
val icon: Drawable = packageManager.getApplicationIcon(applicationInfo)
然后,使用AndroidDrawablePainter将Drawable转换为Painter:
Image(painter = AndroidDrawablePainter(icon))
或DrawablePainter is available in accompanist图书馆:
Image(painter = DrawablePainter(icon))
如果您使用 Coil library,rememberImagePainter
将接受 Any?
作为其 data
参数,允许您使用返回的 Drawable
来自 PackageManager
,像这样:
Image(
painter = rememberImagePainter(
data = LocalContext.current.packageManager.getApplicationIcon("com.package.example")
)
)
在 Jetpack Compose 中,您可以像这样使用 Image 可组合项轻松显示可绘制对象:
Image(painter = painterResource(id = R.drawable.my_drawable))
我正在构建一个需要列出设备上所有应用程序的应用程序,并且我需要显示它们的图标。我设法使用 PackageManager
class:
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
出于某种原因 icon
可能包含指向不存在的可绘制对象的标识符。
获取应用程序图标使用方法loadIcon
:
val icon: Drawable = applicationInfo.loadIcon(packageManager)
或来自 PackageManager 的方法 getApplicationIcon
:
val icon: Drawable = packageManager.getApplicationIcon(applicationInfo)
然后,使用AndroidDrawablePainter将Drawable转换为Painter:
Image(painter = AndroidDrawablePainter(icon))
或DrawablePainter is available in accompanist图书馆:
Image(painter = DrawablePainter(icon))
如果您使用 Coil library,rememberImagePainter
将接受 Any?
作为其 data
参数,允许您使用返回的 Drawable
来自 PackageManager
,像这样:
Image(
painter = rememberImagePainter(
data = LocalContext.current.packageManager.getApplicationIcon("com.package.example")
)
)