我目前正在开发一款Android应用程序,可以从通知中心重新创建通知。为了完全重新创建通知体验,我还尝试在我的应用中提供通知操作(例如,音乐通知中的后退/播放/暂停/下一个按钮)。
Icon icon = notification.actions[0].getIcon();
((ImageView)view.findViewById(R.id.action0)).setImageIcon(icon);
但我在上面第二行找到了资源未找到的异常。
E/Icon: Unable to load resource 0x7f020259 from pkg=
android.content.res.Resources$NotFoundException: Resource ID #0x7f020259
at android.content.res.Resources.getValue(Resources.java:2558)
[...]
我认为问题在于图标来自不同的应用,并且无法轻松访问,但我无法弄清楚如何正确访问图标。
我知道当资源ID为int时,如何从其他应用程序访问资源,但在这种情况下,我只有一个图标但没有资源ID。
编辑:
文档:https://developer.android.com/reference/android/app/Notification.Action.html#getIcon()
从操作中访问待处理的意图非常有效
答案 0 :(得分:0)
Notification.Action.Icon.java不存储图标位图,它只存储其资源ID,您的应用程序无法读取其他应用程序的资源,它搜索自己的资源但找不到ID,所以抛出异常。
Notification.java 中的
public Icon getIcon() {
if (mIcon == null && icon != 0) {
// you snuck an icon in here without using the builder; let's try to keep it
mIcon = Icon.createWithResource("", icon);
}
return mIcon;
}
Icon.java 中的
public static Icon createWithResource(String resPackage, @DrawableRes int resId) {
if (resPackage == null) {
throw new IllegalArgumentException("Resource package name must not be null.");
}
final Icon rep = new Icon(TYPE_RESOURCE);
rep.mInt1 = resId;
rep.mString1 = resPackage
return rep;
}