使用Intent的动作启动活动并将其限制在应用程序中

时间:2016-06-30 05:07:52

标签: android android-intent android-package-managers android-applicationinfo

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

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

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

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

更新#1:我们是否有更接近intent.setPackage()的内容而不是使用应用ID?

2 个答案:

答案 0 :(得分: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");

请务必确保MainActivity android:exported = true {{1}}如android:exported所述:

  

活动是否可以由其他应用程序的组件启动 - " true"如果它可以,并且"假"如果不。如果" false",则活动只能由相同应用程序的组件或具有相同用户ID的应用程序启动。

答案 1 :(得分:1)

这是解决它当前状态的最短方法:
android:exported = "false"为在android清单中声明的​​每个活动设置它的意图过滤动作。
Check here for reference

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

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