我有一个 RecyclerView 可以获取用户安装的应用程序,其中包括它的图标。我想通过它的 URI 将应用程序的可绘制图标加载到 ImageView。直接使用加载可绘制对象setImageDrawable()
会导致 UI 线程出现问题。使用 Image Loader 延迟加载它Glide
是我解决此类问题的选择。
尝试过的解决方案:https ://stackoverflow.com/a/21993055/13196984 我使用了那个答案,但它没有加载所有图标。这是我的代码片段和手机的快照。
代码:
我如何获取应用程序信息
PackageManager pm = context.getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(0);
ArrayList<InstalledApp> installedApps = new ArrayList<>();
for (ApplicationInfo app : apps) {
if (pm.getLaunchIntentForPackage(app.packageName) != null) {
String appName = String.valueOf(app.loadLabel(pm));
int icon = app.icon;
String packageName = app.packageName;
installedApps.add(new InstalledApp(appName, icon, packageName));
}
}
InstalledApp
是我创建的自定义对象,但我仍然会包含它。
public InstalledApp(String appName, int appIcon,String packageName) {
this.appName = appName;
this.appIcon = appIcon;
this.packageName = packageName;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public int getAppIcon() {
return appIcon;
}
public void setAppIcon(int appIcon) {
this.appIcon = appIcon;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
}
这是我从InstalledApp
对象加载图像的方式
if(app.getAppIcon() != 0) {
Uri uri = Uri.parse("android.resource://" + app.getPackageName() + "/" + app.getAppIcon());
Glide.with(activity).load(uri).into(holder.appIconIV);
}
希望您能够帮助我。:)