¿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?
- Iconos translúcidos en ActionBar cuando está inhabilitado: ¿sólo en mi teléfono?
- Cómo mostrar el icono de apk en mi Administrador de archivos
- "ERROR obtener 'android: icono' atributo: el atributo no es un valor de cadena" al intentar subir al Android Market
- ¿No puedes cambiar el icono predeterminado de la aplicación para Android?
- Aplicación de Android que crea dos iconos de lanzador
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.
- Android utiliza un icono diferente para las aplicaciones recientes
- Android xxx-hdpi dispositivos reales
- Android barra de acción personalizar iconos
- ¿Cuáles son las mejores prácticas para usar iconos SVG en Android?
- Icono de la aplicación para Android en Phonegap
- Ocultar icono del lanzador de aplicaciones en la barra de título cuando se inicia la actividad en android
- ¿Qué relleno, margen y tamaño debo utilizar para un diseño personalizado MenuItem?
- ¿Por qué mi aplicación de Android no muestra el icono y el texto en ActionBar?
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);
- Eventos recibidos varias veces – Greenrobot eventbus
- Android Studio no puede resolver las importaciones de fragmentActivity y ViewPager