如何从API获取应用程序中应用程序图标的资源ID

时间:2013-12-04 19:59:25

标签: android drawable android-resources

我正在编写一个可以包含在各种APK中的API。我想用该应用程序的图标生成通知,该图标需要资源ID。我找不到找到资源ID的方法。我不知道应用程序图标的名称。 Context在构造函数中传递给我的类。以下是我到目前为止的情况:

        ApplicationInfo app = mContext.getApplicationInfo();
        packageManager = mContext.getPackageManager();

        Drawable drawable = packageManager.getApplicationIcon(app);
        String packageName = packageManager.getApplicationLabel(app);

        // logical next step, but I don't know the name of the drawable
        int appIconId = mContext.getResources().getIdentifier("???", "drawable", packageName);

谢谢!

3 个答案:

答案 0 :(得分:8)

此方法适用于获取任何应用程序的应用程序图标,包括您的应用程序:

String packageName=...; //use getPackageName() in case you wish to use yours
final PackageManager pm=getPackageManager();
final ApplicationInfo applicationInfo=pm.getApplicationInfo(packageName,PackageManager.GET_META_DATA);
final Resources resources=pm.getResourcesForApplication(applicationInfo);
final int appIconResId=applicationInfo.icon;
final Bitmap appIconBitmap=BitmapFactory.decodeResource(resources,appIconResId);

答案 1 :(得分:1)

自提出此问题以来,API可能已更改,但我认为不需要使用PackageManager或Resources对象。由于您已经拥有了上下文对象,因此您可以直接从ApplicationInfo获取应用程序图标的资源ID,如下所示:

int appIconResourceId = context.getApplicationInfo().icon;

我获取通知的app图标资源ID,以及在DocumentsProvider扩展类(Storage Access Framework)中设置图标。

答案 2 :(得分:0)

我担心调用者需要将这些信息注入您的代码中。例如,它可以在调用适当的构造函数/初始化方法时作为整数参数与Context一起传入。

至少这也意味着您的用户可以更好地控制组件通知的外观 - 我认为这是件好事。