2012-06-30 21 views
5

getApplicationIcon()から返されているDrawableがデフォルトの/組み込みのアイコンであるかどうかを判断する方法はありますか?PackageManager.getApplicationIcon()はデフォルトアイコンを返しますか?

たとえば、エミュレータに複数のアプリケーションがインストールされています。 「Adobe Reader」にはAdobeが提供するアイコンがあります。一方、「com.android.gesture.builder」と「Sample Soft Keyboard」には、一般的なAndroidアイコンがあります。これらの2つのパッケージのgetApplicationIcon()は異なるBitmapDrawableオブジェクトを返しましたが、同じBitmapオブジェクト([email protected])を返した2つのオブジェクトでgetBitmap()を実行しました。

How to preview R.drawable.* imagesのようなことをして、android.R.drawableリソースをすべて取得し、Drawablesを作成し、getApplicationIcon()から戻るビットマップがそれら。しかし、かなり最適ではありません。

ありがとうございます!

答えて

12

私はこれを考え出しました。 Drawableを返すPackageManager.getDefaultActivityIcon()メソッドがあります。そのDrawableのビットマップがアプリケーションアイコンDrawableのビットマップと一致する場合、それはデフォルトのアイコンです。

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 
    } 
} 
関連する問題