Как отобразить значок установленного приложения в jetpack compose

#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. Пожалуйста, предоставьте трассировку сбоя и код, как вы работаете с менеджером пакетов.

2. Я изменил сообщение. Спасибо

Ответ №1:

По какой-то причине icon может содержать идентификатор, указывающий на несуществующий рисоваемый объект.

Чтобы получить значок приложения, используйте метод loadIcon :

 val icon: Drawable = applicationInfo.loadIcon(packageManager)
 

Или метод getApplicationIcon из менеджера упаковки:

 val icon: Drawable = packageManager.getApplicationIcon(applicationInfo)
 

Затем используйте AndroidDrawablePainter для преобразования Drawable в Painter:

 Image(painter = AndroidDrawablePainter(icon))
 

Или рисовальный рисунок доступен в библиотеке аккомпаниатора:

 Image(painter = DrawablePainter(icon))
 

Комментарии:

1. Но loadIcon()' returns a Drawable and painterResource()` требует идентификатора рисоваемого объекта

2. Добавьте зависимость от ядра загрузки изображений- сопровождающего или просто скопируйте файл AndroidDrawablePainter.kt в свой проект, а затем вы можете преобразовать Drawable в Painter. Я обновил ответ.

3. Я добавил accompanist зависимость от библиотеки в свой проект, но я получаю Unresolved reference: AndroidDrawablePainter . И спасибо тебе

4. Попробуйте DrawablePainter вместо AndroidDrawablePainter