启动应用程序知道程序包名称


77

有人可以告诉我如何仅知道包名称来启动新应用程序吗?我没有关于主要活动是什么的信息。

Answers:


94

尝试使用PackageManagergetLaunchIntentForPackage()


先生,为什么我不能通过获取其程序包名称给出java.lang.NullPointer异常来启动启动器?
TechArcSri

是否启动一个完整的新实例?我要启动现有的。我怎么做?
JohnyTex

我将添加标志(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)以确保应用程序状态(如果已打开)相同。
JacksOnF1re

当我尝试将其他功能传递给目标应用程序时遇到问题。仅当目标应用程序的进程不存在时,它才能获得额外收益,否则将一无所获。
艾伦·沃克

151

只需使用以下两行,即可启动任何package name已知的已安装应用程序:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.abc");
startActivity( launchIntent );

如果您不知道要启动的应用程序的程序包名称,请尝试一下

PackageManager pm;
pm = getPackageManager();
//  get a list of installed apps.
packages = pm.getInstalledApplications(0);

欲了解更多信息请参考以下链接使用软件包管理器


1
这会启动一个完整的新实例吗?我要启动现有的。我怎么做?
JohnyTex

@hohny TEX你找到问题的解决方案
门纳阿拉萨米

@JohnyTex我知道这是有点晚了,但你可以尝试LaunchIntent.setFlags("Intent.FLAG_ACTIVITY_NEW_TASK");LaunchIntent.setFlags("Intent.FLAG_ACTIVITY_SINGLE_TOP");
KISHORE_ZE

17

您可以通过PackageManager该类获得启动意图:

PackageManager pm = context.getPackageManager();
Intent launchIntent = pm.getLaunchIntentForPackage("com.example.package");
context.startActivity(launchIntent);

请注意,getLaunchIntentForPackage如果找不到包,则返回null。因此,您可能要添加一个空检查:

if (launchIntent != null) {
    context.startActivity(launchIntent);
} else {
    Toast.makeText(context, "Package not found", Toast.LENGTH_SHORT).show();
}

该答案与旧答案仅稍有不同,只是更新了3年。我看不出投票的合理性。
hBrent

但是至少他发布了该方法,如果没有数据包,则该方法返回null,我将尝试捕获未发现异常的活动。@ hBrent
Xenolion

1
Intent intent;                                        
PackageManager pm = getActivity().getPackageManager();

intent = pm.getLaunchIntentForPackage("com.package.name");                       
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.