0

Ich arbeite derzeit an einer Android-App, die die Benachrichtigungen aus dem Benachrichtigungscenter neu erstellt. Um die Benachrichtigungsfunktion vollständig wiederherzustellen, habe ich auch versucht, die Benachrichtigungsaktionen in meiner App verfügbar zu machen (z. B. die Zurück/Wiedergabe/Pause/Weiter-Tasten von Musikbenachrichtigungen).Android-Benachrichtigungsaktionssymbol: Ressourcen nicht gefunden Ausnahme

Icon icon = notification.actions[0].getIcon(); 
((ImageView)view.findViewById(R.id.action0)).setImageIcon(icon); 

Aber ich bekomme eine Ressource nicht gefunden Ausnahme in der zweiten Zeile oben.

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) 
[...] 

Ich denke, das Problem ist, dass das Symbol aus einer anderen App ist und nicht so einfach zugegriffen werden kann, aber ich kann nicht herausfinden, wie das Symbol richtig zuzugreifen.

Ich weiß, wie auf Ressourcen von anderen Anwendungen zugreifen, wenn ich eine Ressource ID als int habe, aber in diesem Fall habe ich nur ein Symbol, aber keine Ressource ID.

Edit:

Dokumentation: https://developer.android.com/reference/android/app/Notification.Action.html#getIcon()

die anstehenden Absicht von den Aktionen Zugriff funktioniert perfekt

+0

hallo Frecki nur aktualisieren ImageViw Initialisierungsverfahren nicht verwenden ((Image) view.findViewById (R.id.action0)). SetImageIcon (Symbol); aber versuchen Sie Imageview action0 = (Imageview) view.findViewById (R.id.action0); action0.setImageIcon (Symbol); –

+0

kann es gelöst werden. –

+0

@KrunalPatel versuchte es, löste es nicht :( – Frecki

Antwort

0

Die Notification.Action.Icon.java speichert nicht das Symbol Bitmap, es nur speichern ihre Ressourcen-ID, Ihre App kann die Ressource anderer Apps nicht lesen, sie durchsucht ihre eigene Ressource und kann die ID nicht finden. Daher wird eine Ausnahme ausgelöst.

in 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; 
} 

in 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; 
} 
+0

So ist es nicht möglich, das Symbol aus der Benachrichtigung zu bekommen? – Frecki

+0

Mit diesem Code: 'int resource = (int) notification.extras. get (Notification.EXTRA_SMALL_ICON); Kontext packageContext = Kontext.createPackageContext (notifications.get (Position) .getPackageName(), 0); Bitmap Bitmap = BitmapFactory.decodeResource (packageContext.getResources(), Ressource); ' Ich bin in der Lage, das "kleine Icon" zu bekommen, das auch aus einem anderen App-Paket stammt .... gibt es keine ähnliche Möglichkeit das Action-Icon zu bekommen? – Frecki

+0

Je nach Quellcode sollte es davon abhängen, wie das Icon dort erstellt wird Es gibt vier Typen: TYPE_BITMAP, TYPE_RESOURCE, TYPE_DATA, TYPE_URI – Harlan