Java 如何启动另一个应用程序的特定(明确)活动

Java 如何启动另一个应用程序的特定(明确)活动,java,android-intent,android-activity,launch,Java,Android Intent,Android Activity,Launch,我想从我的应用启动另一个应用的特定活动。例如,在我的应用程序的onCreate上,我想启动com.pas.webcam.pro中名为Rolling(非主)的活动。我听说你必须控制这两个应用才能做到这一点,因为你必须在第二个应用的清单中添加一个意图过滤器。但事实并非如此,因为Google Play商店中的activity launcher应用程序可以启动IP Webcam Pro的滚动活动 这本书是开源的,所以我试着复习一下。但它太复杂了,所以我想不出这个应用程序是如何神奇地启动这个活动的。关于堆

我想从我的应用启动另一个应用的特定活动。例如,在我的应用程序的
onCreate
上,我想启动
com.pas.webcam.pro
中名为
Rolling
(非主)的活动。我听说你必须控制这两个应用才能做到这一点,因为你必须在第二个应用的清单中添加一个意图过滤器。但事实并非如此,因为Google Play商店中的activity launcher应用程序可以启动IP Webcam Pro的滚动活动

这本书是开源的,所以我试着复习一下。但它太复杂了,所以我想不出这个应用程序是如何神奇地启动这个活动的。关于堆栈溢出还有许多其他类似的问题,我已经阅读了每一个问题。我也尝试了很多答案中的代码,比如:

Intent Intent=新Intent();setComponent(新组件名(“com.pas.webcam”、“com.pas.webcam.RollingActivity”);星触觉(意向)

我还尝试了其他帖子中的代码变体。我的应用程序总是崩溃,我会得到以下变体(取决于我使用的代码):

发生了一个错误

无效的意图操作。找不到显式活动类{com.pas.webcam.pro/com.pas.webcam.pro.Rolling};您是否在AndroidManifest.xml中声明了此活动

我已经在我的Android清单中添加了以下两项,同样的事情也发生了:

编辑:David Wasser通过给我解决问题所需的代码来帮助我解决问题。它确实有效!要使用代码启动另一个应用程序的特定活动,请使用以下命令:

Intent Intent=新Intent();intent.setClassName(“com.pas.webcam.pro”、“com.pas.webcam.Rolling”);星触觉(意向)

您可以替换com.pas.webcam.pro并使用您选择的应用程序和活动,但这种方法确实有效。问题解决了 试试这个:

Intent intent = new Intent();
intent.setClassName("com.pas.webcam.pro", "com.pas.webcam.Rolling");
startActivity(intent);

由于您将该应用称为“IP webcam pro”,因此我假设软件包名称为“com.pas.webcam.pro”(由Internet research找到)。

您需要知道要启动的
活动的确切软件包名称和确切类名。从你的问题来看,你似乎没有正确的名字。此外,并非所有其他应用程序的活动都可以直接启动。另一个应用程序的
活动
只有在声明为
android:exported=“true”
且未包含在你的应用程序不具备的权限范围内时,你的应用程序才能直接启动。感谢你的评论,你的清单中不需要任何内容。您需要知道另一个应用程序的确切程序包名称(这在另一个应用程序的清单中),并且需要知道要启动的
活动的确切完全限定类名。这也可以在其他应用程序的清单中找到。完全限定的类名类似于
com.pas.webcam.pro.Rolling
,但也可能完全不同。如果您没有其他应用程序的清单(或APK),可以使用
PackageManager
获取此信息。您可以查询
PackageManager
以获取有关其他已安装应用程序的信息,包括活动名称等。我绝对100%肯定正确的软件包名称是com.pas.webcam.pro。该活动的名称无疑是滚动的。滚动绝对正确。我不需要查询包管理器。我已经有了要启动的包名和活动。如果你确定我不需要在清单上添加任何东西,我认为这是正确的,那么我做错了什么?我的代码坏了吗?如何启动此软件包的此活动?谢谢,哇!我已经寻找了几个星期的解决办法。我可能已经尝试了10种不同类型的代码。然而,这一简单的代码行是有效的。谢谢,非常感谢。很高兴这解决了你的问题。您可以通过单击答案旁边的绿色复选标记来接受我的答案。这将从开放式问题列表中删除该问题,并可能帮助其他有类似问题的人。