我想从设备上的另一个应用程序获得具有最高分辨率的活动图标,但无法弄清楚如何做到这一点......
在我的应用程序中,我可以从设备上可用的所有活动列表中选择一个活动,对应的意图将返回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!答案 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;
然后你应该能够使用你的第二种方法来解决密度问题。