从另一个应用程序调用应用程序

20
在我正在开发的应用程序中,我需要加载/调用已安装在手机上的另一个应用程序。这是仅供我个人使用的应用程序,因此无需检查其他应用程序是否已安装 - 我知道它已经安装了。
我已经搜索了几个小时的这个问题,但是我找不到任何有效的方法。主要原因是查找程序包名称和类名称的指南非常糟糕。
通过 cmd 和 adb,我能够找到有关我想要调用的应用程序的信息如下: package:/data/app/com.soundcloud.android-1.apk=com.soundcloud.android (这正是在 cmd 窗口中显示的内容。)
我尝试了类似这样的东西:
Intent i = new Intent();
i.setClassName("/data/app/com.soundcloud.android-1.apk", "com.soundcloud.android");
startActivity(i);

但我的应用程序只是崩溃了。我使用了上面的代码,因为有人说这可以调用一个应用程序:

Intent i = new Intent();
i.setClassName("<package_name>","<Class Name(with package name)>");
startActivity(i);

有人知道到底应该写什么吗?

附言:我的应用程序不需要关于被调用应用程序中正在发生的事情的任何信息。


你对 i.setClassName("<package_name>","<Class Name(with package name)>"); 不理解的是什么? - Falmarri
我不知道应该在这些参数中放什么。或者这样做是否有效。 - gosr
2个回答

36

使用PackageManager获取该包的Intent:

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

我正在使用PackageManager方法,但在尝试运行某些特定应用程序(如日历)时,应用程序崩溃。这是来自我的logcat的行,有什么想法吗?04-22 23:08:49.390: E/AndroidRuntime(16772): java.lang.NullPointerException 04-22 23:08:49.390: E/AndroidRuntime(16772): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) - Khobaib
@Khobaib 听起来你的 Intent 是 null(这就是 NullPointerException 的意思)。也许再检查一下包名。 - jklp

1

文档在这里

我认为在你的例子中,com.soundcloud.android实际上是包名,所以应该作为第一个参数。对于第二个参数,你仍然需要找出要使用的类。

如果你没有代码,可以查看如何从apk中找到类这里


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