1

我有 2 个应用程序具有相同的包名称但不同的包 ID(在 gradle 配置中设置)。

通过在两个应用程序中设置相同的意图的操作字符串来启动一个活动。

这意味着,如果我在同一设备上安装了两个应用程序,那么启动 Activity 会显示一个Complete action using..对话框,要求用户选择一个活动来完成操作。

我的问题是如何在不更改清单文件中的字符串本身(其中很多是由于多个模块)以及startActivity()在代码库中使用自身之前设置操作字符串的情况下将它们分开,以便将操作限制为只有当前的应用程序?

更新#1:我们是否有更接近于intent.setPackage()使用应用程序 ID 的方法?

4

2 回答 2

1

如果我没有错过您的问题,您可以通过以下代码将其存档:

// start exactly component
Intent intent = new Intent();
intent.setComponent(new ComponentName("yourPackageId", "yourPackageName.MainActivity"));
startActivity(intent);

//or you want to start launcher intent
Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage("yourPackageId");

你应该确保你MainActivityandroid:exported = true这里描述的android:exported

Activity 是否可以由其他应用程序的组件启动 - 如果可以,则为“true”,否则为“false”。如果为“false”,则该活动只能由同一应用程序的组件或具有相同用户 ID 的应用程序启动。

于 2016-06-30T06:44:55.630 回答
1

这是在当前状态下处理它的最短方法:
android:exported = "false"对于在 android manifest 设置中声明的每个活动,它都是带有动作的意图过滤器。
在这里查看以供参考

我忽略了一个事实,在 GCM 的广播接收器和其他后台服务的情况下,我们通常也会这样做。

这必须在两个应用程序中完成以实现更紧密的集成。

于 2016-06-30T08:54:18.367 回答