Java 检索应用程序';s图标don';不适用于所有应用程序

Java 检索应用程序';s图标don';不适用于所有应用程序,java,android,package,icons,Java,Android,Package,Icons,在我的Android应用程序中,我会显示安装在我设备上的所有应用程序,并显示每个应用程序的图标 这是我使用包名检索图标的代码 Drawable icon = Utils.getAppIconByPackage(context, app.getPackage()); if (icon != null) { holder.ivIcon.setImageDrawable(icon); } else { try { Uri uri = Uri.parse("android

在我的Android应用程序中,我会显示安装在我设备上的所有应用程序,并显示每个应用程序的图标

这是我使用包名检索图标的代码

Drawable icon = Utils.getAppIconByPackage(context, app.getPackage());
if (icon != null) {
    holder.ivIcon.setImageDrawable(icon);
} else {
    try {
        Uri uri = Uri.parse("android.resource://" + app.getPackage() + "/" + context.getPackageManager().getApplicationInfo(app.getPackage(), 0).icon);
        Picasso.with(context)
             .load(uri)
             .placeholder(R.drawable.im_app_placeholder)
             .into(holder.ivIcon);
    } catch (Exception e) {
        Picasso.with(context)
             .load(ServerUtils.getItemAppIcon(app.getName() + ICON_EXTENSION))
             .placeholder(R.drawable.im_app_placeholder)
             .into(holder.ivIcon);
    }
}
问题是没有为所有应用程序检索图标(一些应用程序具有图标,另一些应用程序具有默认占位符),我不理解为什么,因为包名检索正确


如果我需要编辑更多代码,请告诉我。

试试这个,它对我有用

 List<ApplicationInfo> applist = MainActivity.packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
                    for (ApplicationInfo info : applist) {

Drawable icon= info.loadIcon(MainActivity.packageManager); //icon of app
}
List applist=MainActivity.packageManager.getInstalledApplications(packageManager.GET_META_数据);
for(ApplicationInfo:applist){
Drawable icon=info.loadIcon(MainActivity.packageManager);//应用程序的图标
}
我假设您的“mainactivity.packagemanager”是您编写的自定义内容,而不是我可以使用的默认android方法。。