如何从我的启动器应用程序的另一个应用程序获取高dpi活动图标?

时间:2014-10-22 19:37:09

标签: java android android-intent android-activity icons

我想从设备上的另一个应用程序获得具有最高分辨率的活动图标,但无法弄清楚如何做到这一点......

在我的应用程序中,我可以从设备上可用的所有活动列表中选择一个活动,对应的意图将返回onActivityResult。在那里我可以得到这样的活动图标:

    Drawable icon = null;
    ComponentName componentName = intent.getComponent();
    String packageName = componentName.getPackageName();        
    PackageManager pm = this.getPackageManager();
    icon = pm.getActivityIcon(intent);
然后,我可以获得具有最高分辨率的app-icon,如下所示:

PackageInfo pi = pm.getPackageInfo(packageName, 0);
Context otherAppCtx = this.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);

int displayMetrics[] = { DisplayMetrics.DENSITY_TV, DisplayMetrics.DENSITY_HIGH, DisplayMetrics.DENSITY_XHIGH, DisplayMetrics.DENSITY_XXXHIGH };

for (int displayMetric : displayMetrics)
{
    try
    {
           Drawable d = otherAppCtx.getResources().getDrawableForDensity(pi.applicationInfo.icon, displayMetric); 


            if (d != null)
            {
                icon = d;
            }
    }
    catch (Resources.NotFoundException e)
    {

            continue;
    }
}

这很好但我想获得活动图标而不是具有最高分辨率的应用程序图标。有谁知道怎么做?

提前thx!

1 个答案:

答案 0 :(得分:2)

您使用它是正确的轨道,您只需使用ActivityInfo而不是PackageInfo。例如你在哪里:

Drawable icon = null;
ComponentName componentName = intent.getComponent();
String packageName = componentName.getPackageName();        
PackageManager pm = this.getPackageManager();
icon = pm.getActivityIcon(intent);

获取图标资源(如果已设置),而不是获取drawable:

ComponentName componentName = intent.getComponent();
ActivityInfo ai = this.getPackageManager().getActivityInfo(componentName, 0);
int iconResId = ai.icon;

然后你应该能够使用你的第二种方法来解决密度问题。