如何在应用程序中获取主活动名称?

3
如何获取系统中第三方应用程序的主活动(activity)?
PackageManager  pm= getPackageManager();
List<PackageInfo> packs = pm.getInstalledPackages(0);
for (PackageInfo pi : packs) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("icon", pi.applicationInfo.loadIcon(pm));
map.put("appName", pi.applicationInfo.loadLabel(pm));
map.put("packageName", pi.packageName);
}

我知道如何获取包名,但不知道如何获取主活动的名称。
我使用pi.activities[0].name,但仍然获得空指针。
非常感谢任何人的想法。

1
你的应用程序名称不是存储在strings.xml中吗?这也被用于清单。 - Stephan Celis
1
@StephanCelis OP 问如何获取第三方应用程序中主活动的名称,而不是他自己的应用程序(即:没有源代码)。 - David Wasser
@David Wasser,说得好!我错过了那个细节。 - Stephan Celis
2个回答

2

使用

pm.getLaunchIntentForPackage(pi.packageName);

这将给你启动意图,如果你打印它,你将看到启动器意图和主要活动。

如果您只想显示可以从设备启动器启动的活动,则需要为类别Launcher设置过滤器。


1
你可以使用以下内容。
final PackageManager pm = getApplicationContext().getPackageManager();
ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo( this.getPackageName(), 0);
 } catch (final NameNotFoundException e) {
 ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "unknown)");

OP问如何获取第三方应用程序中主活动的名称,而不是自己的应用程序。此代码仅适用于您自己的应用程序。 - David Wasser
@DavidWasser 抱歉,我修改了答案。 - pvn
OP要求的是主活动的名称,不是应用程序的名称。你的答案仍然是错误的。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接