2012-06-30 5 views
5

¿Hay alguna manera de saber si el Drawable que obtengo de getApplicationIcon() es un icono predeterminado/incorporado o no?PackageManager.getApplicationIcon() que devuelve el icono predeterminado?

Por ejemplo, tengo varias aplicaciones instaladas en mi emulador. "Adobe Reader" tiene un icono proporcionado por Adobe. "com.android.gesture.builder" y "Sample Soft Keyboard", por otro lado, tienen un ícono genérico de Android. getApplicationIcon() para esos dos paquetes devolvió diferentes objetos BitmapDrawable, pero al ejecutar getBitmap() en esos dos objetos se devolvió el mismo objeto Bitmap ([email protected]).

La única idea que tengo hasta ahora es hacer algo como How to preview R.drawable.* images y tomar todos los recursos de android.R.drawable, crear Drawables de ellos, y comprobar si el mapa de bits que obtengo de getApplicationIcon() coincide con cualquiera de ellos. Eso es bastante subóptimo, sin embargo.

Gracias!

Respuesta

12

Acabo de descubrir esto. Hay un método PackageManager.getDefaultActivityIcon() que devuelve Drawable. Si ese mapa de bits de Drawable coincide con el icono de la aplicación Drawable's Bitmap, entonces es el ícono predeterminado.

PackageManager pm = context.getPackageManager(); 
Drawable icon = pm.getApplicationIcon(apk.package_name); 
Drawable default_icon = pm.getDefaultActivityIcon(); 
if (icon instanceof BitmapDrawable && default_icon instanceof BitmapDrawable) { 
    BitmapDrawable icon_bd = (BitmapDrawable)icon; 
    Bitmap icon_b = icon_bd.getBitmap(); 
    BitmapDrawable default_bd = (BitmapDrawable)pm.getDefaultActivityIcon(); 
    Bitmap default_b = default_bd.getBitmap(); 
    if (icon_b == default_b) { 
     // It's the default icon 
    } 
} 
Cuestiones relacionadas