Android通知操作图标:找不到资源异常

时间:2016-07-09 11:28:51

标签: java android android-notifications android-resources android-package-managers

我目前正在开发一款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()

从操作中访问待处理的意图非常有效

1 个答案:

答案 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;
}