¿Recuperando iconos de la aplicación xhdpi de packageManager?

Tengo una actividad en mi aplicación en la que se genera un ListView de todas las aplicaciones instaladas. Además del nombre de la aplicación, el icono de la aplicación también aparece. Había creado una matriz de objetos que contenían toda la información sobre la aplicación, entre ésta el icono, y recuperé el icono usando:

drawableAppIcon = mPackageManager.getApplicationIcon(apps.applicationInfo); 

Donde la application es un objeto <PackageInfo> . El problema con esto es que mientras que fácilmente tienen acceso a todos los drawables, varias aplicaciones parecen tirar varios drawables de calidad; un icono de la aplicación será extremadamente alto res mientras que otro será la versión de baja resolución. Yo habría pensado que la línea de código anterior habría representado el tamaño de la pantalla y encontró los iconos adecuados, pero no lo hace. ¿Hay alguna alternativa que explique el tamaño de la pantalla? ¿O aún más preferiblemente hay una manera de extraer apenas el icono más alto de la res y después escalarlo abajo basado en el tamaño de la pantalla, que básicamente garantizaría que todos ellos parecían limpios?

EDIT: He encontrado una solución, pero sólo funciona para 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(); } 

Para la referencia de otros, esto funciona, si alguien tiene una solución para la versión anterior de Android que sería realmente útil.

Sospecho que hay alguna otra razón por la que los iconos se ven mal (como cambiar el tamaño dentro de tu aplicación), pero si necesitas hacerlo para cualquier versión de Android:

 // Get the application's resources Resources res = mPackageManager.getResourcesForApplication(appInfo); // Get a copy of the configuration, and set it to the desired resolution Configuration config = res.getConfiguration(); Configuration originalConfig = new Configuration(config); config.densityDpi = DisplayMetrics.DENSITY_XHIGH; // Update the configuration with the desired resolution DisplayMetrics dm = res.getDisplayMetrics(); res.updateConfiguration(config, dm); // Grab the app icon Drawable appIcon = res.getDrawable(appInfo.icon); // Set our configuration back to what it was res.updateConfiguration(originalConfig, dm); 
 ApplicationInfo applicationInfo = packagemanager.getApplicationInfo(packageName(), PackageManager.GET_META_DATA); Resources res = packagemanager.getResourcesForApplication(applicationInfo); Drawable appIcon = res.getDrawableForDensity(applicationInfo.icon, DisplayMetrics.DENSITY_XXXHIGH, null); 
  • Cambio de icono de aplicación de Android
  • Extensión de XML de XML
  • ¿Hay alguna manera de cambiar dinámicamente un icono de aplicación Android como la aplicación de calendario?
  • ¿Cómo cambiar el color de los internos Android drawables?
  • ¿Dónde puedo encontrar los íconos de la pestaña de Android?
  • Quitar icono de la barra de acción xamarin
  • ¿Cómo crear una notificación sin icono en la barra de estado o simplemente ocultarlo?
  • Obtener icono de la aplicación predeterminada que abre un archivo
  • Barra de acción dividida: los iconos se superponen cuando uso android: showAsAction = "always"
  • Cordova Android 6.4.0 crea la carpeta res de nivel superior no dentro de las plataformas android
  • ¿Cómo utilizar iconos personalizados en jQuery móvil?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.