Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Intent'启动活动;s操作并将其限制在应用程序内_Android_Android Intent_Android Package Managers_Android Applicationinfo - Fatal编程技术网

Android 使用Intent'启动活动;s操作并将其限制在应用程序内

Android 使用Intent'启动活动;s操作并将其限制在应用程序内,android,android-intent,android-package-managers,android-applicationinfo,Android,Android Intent,Android Package Managers,Android Applicationinfo,我有两个应用程序具有相同的包名,但不同的包ID(在gradle配置中设置) 通过在两个应用中都相同的两个应用中设置意图的操作字符串来启动活动 这意味着,如果我在同一台设备上安装了两个应用程序,那么启动一个活动会显示一个使用..完成操作对话框,要求用户选择一个活动来完成操作 我的问题是,在代码库中使用startActivity()本身之前,如何在不更改清单文件中的字符串本身(由于多个模块而导致大量字符串)和操作字符串设置的情况下将它们分开,从而使操作仅限于当前应用程序 更新#1:我们是否有更接近i

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

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

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

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


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

如果我不理解您的问题,您可以通过以下代码将其存档:

// 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");
您应该确保您的
main活动
具有
android:exported=true
,如下所述:

活动是否可以由其他应用程序的组件启动—如果可以,则为“真”,如果不能,则为“假”。如果为“false”,则活动只能由相同应用程序的组件或具有相同用户ID的应用程序启动


以下是在当前状态下解决此问题的最短方法:
android:exported=“false”
对于在android清单设置中声明的每个活动,它的意图过滤器带有一个操作。

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

为了实现更紧密的集成,这两个应用程序都必须这样做