在Android上从不同的应用程序启动另一个应用程序的活动

4
我需要从我自己的应用程序启动另一个应用程序的活动(而不是主要活动)。 我想要启动的活动是专有的,因此我不能对其代码(或清单)进行任何更改。
例如:我想从我的应用程序中启动某人的Facebook个人资料。 从我的应用程序到Facebook的普通意图将打开“新闻来源”(我不想要这个)。 我想知道如何访问任何其他活动。
提前感谢!
我拥有的一点代码:
String PACKAGE="com.facebook.katana";
Intent launchIntent = getPackageManager()
                    .getLaunchIntentForPackage(PACKAGE);
startActivity(launchIntent);

1
我想知道如何访问任何其他活动 - 你向其他应用程序的开发人员询问,“在您的应用程序中启动这个活动的正确'意图'结构是什么?而且,您是否打算长期支持该'意图'?” - CommonsWare
1个回答

3
要启动特定的活动,您需要使用显式意图。或者,如果您知道该活动响应的操作,则可以使用具有操作的隐式意图。
要使用显式意图,您可以执行以下操作(提供您从活动中调用它):
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.package.name", "com.package.name.ActivityName"));
        if(getPackageManager().resolveActivity(intent, 0) != null) {
            startActivity(intent);
        } else {
            Toast.makeText(this, "No app installed that can perform this action", Toast.LENGTH_SHORT).show();
        }

您还可以给intent添加标志(flag),添加动作(action)和类别(category)。只要PackageManager能够将intent解析为可行的intent,它就会启动相应的活动(activity)。
现在...
关于Facebook个人资料的问题,是一个不同的问题。
也许,最好的方法是使用带有动作VIEW的intent,并提供Intent.setData与指向个人资料页面的uri。这也应该检查是否能够正确解析。然后将启动支持打开它的所有活动的选择器,其中应包括Facebook应用程序。接下来由用户决定是否使用Facebook应用程序或启动器来打开intent。

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