theme

Android获取未经启动器launcher主题theme修改过的应用图标icon

今天说的这个问题是这样的,在Android App中获取自身或其它某个包名应用的图标时,取到的Drawable并不是实际资源的图标图,而是被启动器或者主题“风格化”后的版本,比如我的一加一的CM13s系统默认主题下启动器中的应用图标会被自动P成这样:

其它如MIUI等也会有类似操作,而无论你是用这样:

getPackageManager().getApplicationIcon(getApplicationInfo());

还是这样:

// Unity应用默认的图标res名叫app_icon,AS会叫ic_launcher,看下manifest中指定的资源ID串就知道了
int iconId = getResources().getIdentifier("app_icon", "drawable", getPackageName());
if (iconId>0) {
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        dIcon = getResources().getDrawable(iconId, getTheme());
    } else {
        dIcon = getResources().getDrawable(iconId);
    }
}

取到的都会是修改后的图标图,那么如何取得apk中的原版图标图片呢?答案在此(感谢伟大的google及stackoverflow!):
Continue reading…