5

getApplicationIcon()から取得しているDrawableがデフォルト/組み込みのアイコンであるかどうかを確認する方法はありますか?

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

私がこれまでに持っている唯一のアイデアは、R.drawable。*画像をプレビューし、すべてのandroid.R.drawableリソースを取得し、それらからDrawablesを作成し、getApplicationIcon( )それらのいずれかに一致します。ただし、これはかなり最適ではありません。

ありがとう!

4

1 に答える 1

12

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

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
    }
}
于 2012-06-30T21:22:01.097 に答える