Xhdpi-App-Symbole aus packageManager abrufen?

Ich habe eine Aktivität in meiner App, bei der eine ListView aller installierten Apps generiert wird. Zusätzlich zum App-Namen wird auch das App-Symbol angezeigt. Ich hatte eine Reihe von Objekten erstellt, die alle Informationen über die Anwendung enthielten, darunter das Symbol, und das Symbol mithilfe der folgenden Befehle abgerufen:

drawableAppIcon = mPackageManager.getApplicationIcon(apps.applicationInfo);

Woherapplication ist ein<PackageInfo> Objekt. Das Problem dabei ist, dass ich zwar leicht auf alle Drawables zugreifen kann, aber verschiedene Apps verschiedene Qualitäts-Drawables abzurufen scheinen. Ein App-Symbol ist extrem hochauflösend, während ein anderes die niedrigauflösende Version ist. Ich hätte gedacht, dass die obige Codezeile die Bildschirmgröße berücksichtigt und die entsprechenden Symbole gefunden hätte, aber das ist nicht der Fall. Gibt es eine Alternative, die die Bildschirmgröße berücksichtigt? Oder gibt es noch bevorzugter eine Möglichkeit, nur das Symbol mit der höchsten Auflösung zu extrahieren und es dann basierend auf der Bildschirmgröße zu verkleinern, wodurch im Grunde garantiert wird, dass alle sauber aussehen?

EDIT: Ich habe eine Lösung gefunden, aber es funktioniert nur für Android 4.0+

try {
    Context otherAppCtxt = context.createPackageContext(apps.applicationInfo.packageName, Context.CONTEXT_IGNORE_SECURITY);
    info.drawableAppIcon = otherAppCtxt.getResources().getDrawableForDensity(apps.applicationInfo.icon, DisplayMetrics.DENSITY_XHIGH);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

Für andere funktioniert dies, wenn jemand eine Lösung für eine ältere Version von Android hat, die wirklich hilfreich wäre.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage