Icon-Pack Implementierung

  • Antworten:1
  • Bentwortet
Aaron B.
  • Forum-Beiträge: 206

02.06.2015, 19:49:47 via Website

Hallo,

ich möchte in meiner Anwendung die Nutzung von Icon-Packs (Apex/Go-Launcher etc.) möglich machen.
Dazu verwende ich folgenden Code:


public HashMap loadIconPack(String packPkg) {
try {
Resources r = getPackageManager().getResourcesForApplication(packPkg);
int i = r.getIdentifier("appfilter", "xml", packPkg);
XmlResourceParser p = r.getXml(i);

    HashMap<String, Integer> map = new HashMap<>();

    int eventType;
    while((eventType = p.next()) != XmlResourceParser.END_DOCUMENT) {
        switch(eventType) {
            case XmlResourceParser.START_TAG:
                String tag = p.getName();
                if(tag.equals("item")) {
                    try {
                        String component = p.getAttributeValue(null, "component");
                        String drawable = p.getAttributeValue(null, "drawable");
                        String appPkg = component.substring(component.indexOf("{") + 1, component.lastIndexOf("}")).split("/")[0];

i = r.getIdentifier(drawable, "drawable", packPkg);

                        map.put(appPkg, i);
                    }catch(Throwable t) {
                        t.printStackTrace();
                    }
                }
                break;
        }
    }

    return map.size() == 0 ? null : map;
}catch(Throwable t) {
    t.printStackTrace();
    return null;
}

}

Für die meisten Apps funktioniert dieser Code, doch bei manchen wird beim Laden des identifiers (siehe markierte Zeile) nur 0 zurückgegeben.

Bei dem Icon-Pack "Gel" z. B. funktioniert dieser Code für Chrome, den Google Play Store und bei einigen anderen Apps nicht.

Was habe ich falsch gemacht?

LG

— geändert am 02.06.2015, 19:53:06

Antworten
Aaron B.
  • Forum-Beiträge: 206

08.06.2015, 16:52:27 via App

Also es kann nicht daran liegen, dass die Icons nicht existieren, mit einem anderen Launcher werden sie angezeigt. Liegt es evtl. am Typ ("drawable")?

Antworten