我正在编写一个可以包含在各种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);
谢谢!
答案 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一起传入。
至少这也意味着您的用户可以更好地控制组件通知的外观 - 我认为这是件好事。