アイコンを含むユーザーのインストール済みアプリを取得する 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);
}
あなたが私を助けてくれることを願っています。:)