在 Android 11 中无法使用 taskAffinity 进行跨应用程序活动

Yik*_*ung 3 android cross-application taskaffinity android-activity android-11

我有两个应用程序,应用程序A和应用程序B,现在我想从应用程序A启动应用程序B中的一个活动,该活动的启动模式是\xe2\x80\x9csingleTask\xe2\x80\x9d。

\n

顺序:\n活动 X(应用程序 A)\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94> 活动 Y(应用程序 B)\xe2\x80\x94\xe2\x80\x94\xe2\ x80\x94> 活动 Z(应用程序 B,launchMode=\xe2\x80\x9csingleTask\xe2\x80\x9d)

\n

默认的 AndroidManifest 配置中,任务管理器中会显示两个应用程序,我希望用户在任务管理器中只能看到应用程序 A 标签,因此当他们在任务之间切换时,不要点击应用程序 B。在 Android 11 之前(Android R),我使用如下属性taskAffinity来解决这个问题。

\n

Activity X 和 Activity Z,将其添加到 AndroidManifet.xml 中

\n

android:taskAffinity="com.abc.xxx\xe2\x80\x9d

\n

因此,这些活动可以同时包含在一项活动任务中。在 Android 10 中,它可以工作。

\n

然而,它在 Android11 中不再适用\xe2\x80\x99。而且,我没有\xe2\x80\x99找到任何与这个场景相关的新功能。

\n

如何使 ApplicationA\xe2\x80\x99s 活动任务容纳 ApplicationB 的活动,其启动模式为 singleTask?让用户在任务管理器中只能看到一个任务(ApplicationA)。

\n

Dav*_*ser 5

你不能。而你不应该。它之前工作的原因是它taskAffinity胜过(覆盖)launchMode. 显然他们已经在 Android 11 中更改/修复了这一点。

如果 anActivity被声明为,singleTask那么这会告诉 Android 想要Activity成为Activity自己任务的根。当您启动此任务时Activity,它应该在新任务中启动,而不是在与Activity启动相同的任务中启动。

在早期版本的 Android 中,如果 与启动任务的根目录相同,Activity则将启动到同一任务。这从未被明确记录,因此不清楚这是“错误”还是“功能”。看起来他们终于在 Android 11 中更改/修复了这个问题。ActivitytaskAffinityActivity

请参阅我对这些相关问题的回答: