【问题标题】:PackageManager.getApplicationIcon() returning default icon?PackageManager.getApplicationIcon() 返回默认图标?
【发布时间】:2012-07-01 12:28:27
【问题描述】:

有没有办法判断我从 getApplicationIcon() 返回的 Drawable 是否是默认/内置图标?

例如,我的模拟器上安装了几个应用程序。 “Adobe Reader”具有 Adob​​e 提供的图标。另一方面,“com.android.gesture.builder”和“Sample Soft Keyboard”有一个通用的 Android 图标。这两个包的 getApplicationIcon() 返回不同的 BitmapDrawable 对象,但在这两个对象上运行 getBitmap() 返回相同的 Bitmap 对象 (android.graphics.Bitmap@401a7df8)。

到目前为止,我唯一的想法是执行How to preview R.drawable.* images 之类的操作并获取所有 android.R.drawable 资源,从中创建可绘制对象,并检查我从 getApplicationIcon() 返回的位图是否与任何匹配其中。不过,这并不理想。

谢谢!

【问题讨论】:

    标签: android bitmap drawable


    【解决方案1】:

    我刚刚想通了。有一个返回 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多