我有2个应用程序具有相同的程序包名称但不同的程序包ID(在gradle配置中设置)。
通过在两个应用中的两个应用中设置意图的操作字符串来启动活动。
这意味着如果我在同一设备上安装了两个应用程序,那么启动一个活动会向我显示一个Complete action using..
对话框,要求用户选择一个活动来完成操作。
我的问题是如何在不通过更改清单文件中的字符串本身(其中很多是由于多个模块)和在使用startActivity()
本身之前设置操作字符串的情况下将它们分开代码库,以便操作仅限于当前的应用程序?
更新#1:我们是否有更接近intent.setPackage()
的内容而不是使用应用ID?
答案 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的广播接收器和其他后台服务的情况下也做了一些事情。
这必须在两个应用程序中完成,以实现更紧密的集成。