gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:16:00 25 4
gpt4 key购买 nike

我想从设备上的另一个应用程序获取尽可能高分辨率的 Activity 图标,但不知道该怎么做......

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

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

然后我可以获得最高分辨率的应用程序图标,如下所示:

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

这很好,但我想获得 Activity 图标而不是具有最高分辨率的应用程序图标。有谁知道如何做到这一点?

提前致谢!

最佳答案

您的方向是正确的,您只需要使用 ActivityInfo 而不是 PackageInfo。例如你在哪里:

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

不是获取可绘制对象,而是获取图标资源(如果已设置):

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

然后你应该可以使用你的第二种方法通过密度来解决它。

关于java - 如何从另一个应用程序为我的启动器应用程序获取高 dpi Activity 图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26515687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com