2012-06-30 8 views
5

Gibt es eine Möglichkeit zu sagen, ob das Drawable, das ich von getApplicationIcon() bekomme, ein Standard/eingebautes Symbol ist oder nicht?PackageManager.getApplicationIcon() Standard-Symbol zurückgeben?

Zum Beispiel habe ich mehrere Anwendungen auf meinem Emulator installiert. "Adobe Reader" hat ein Symbol von Adobe zur Verfügung gestellt. Auf der anderen Seite haben "com.android.gesture.builder" und "Sample Soft Keyboard" ein generisches Android-Icon. getApplicationIcon() für diese beiden Pakete hat verschiedene BitmapDrawable-Objekte zurückgegeben, aber das Ausführen von getBitmap() für diese beiden Objekte hat dasselbe Bitmap-Objekt zurückgegeben ([email protected]).

Die einzige Idee, die ich bisher habe, ist so etwas wie How to preview R.drawable.* images zu tun und alle android.R.drawable Ressourcen greifen, schaffen Drawables von ihnen, und prüfen Sie, ob die Bitmap ich von getApplicationIcon get() entspricht einem Sie. Das ist aber ziemlich suboptimal.

Danke!

Antwort

12

Ich habe gerade herausgefunden. Es gibt eine PackageManager.getDefaultActivityIcon() -Methode, die Drawable zurückgibt. Wenn die Bitmap von Drawable mit dem Anwendungssymbol Drawable's Bitmap übereinstimmt, ist dies das Standardsymbol.

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 
    } 
}