从画中画中的通知打开启动 Intent window

Launching Intent from notification opening in picture-in-picture window

我关注了Android picture-in-picture documentation。也就是说,我的PiPactivity在manifest中被标记为android:launchMode="singleTask"android:resizeableActivity="true"android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

画中画似乎效果很好。但是,我注意到我遇到了不良行为。

当我的应用收到推送时,我创建了一个 PendingIntent,其中 Intent 用于 MyActivityActivity 不同于 PiP Activity)。但是,当我点击通知并使用 Intent 时,MyActivity 在 PiP window!

中启动

我尝试在清单中将 android:launchMode="singleTask" 添加到 MyActivity。在将它与 PendingIntent.getActivity() 一起使用之前,我还尝试以编程方式将该标志添加到 Intent。这似乎无法解决问题。

谁能告诉我如何防止这种情况发生?

android:supportsPictureInPicture="false"添加到清单中的MyActivity。它应该可以解决您的问题

首先,正如您在google sample codes中看到的,它不需要将PIP的启动模式设为Activity singleTask。但是,您需要将启动器任务移到非画中画模式的前面,以禁用画中画状态。

通过在从通知调用的目标 ActivityonCreate() 方法中调用以下代码片段,您可以实现此目的。

public static void moveLauncherTaskToFront(Context context) {
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    assert activityManager != null;
    final List<ActivityManager.AppTask> appTasks = activityManager.getAppTasks();
    for (ActivityManager.AppTask task : appTasks) {
        final Intent baseIntent = task.getTaskInfo().baseIntent;
        final Set<String> categories = baseIntent.getCategories();
        if (categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) {
            task.moveToFront();
            return;
        }
    }
}

------------------------ 之前------------ -------------------------------- After ----- ------------------

为了解决这个问题,我们应该在清单中为 PiP Activity 设置一个唯一的 taskAffinity。它表示 activity 所属的任务。为其设置一个唯一值将 PiP Activity 的任务与您的 MainActivity.

分开
<activity
    android:name=".VideoActivity"
    android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
    android:taskAffinity=".VideoActivity"
    android:supportsPictureInPicture="true" />


---------------------- 之前 ---------------- -------------------------- After ---------- --------------

我也遇到过这个问题,你可以尝试在你的MyPipActivity清单中添加"android:excludeFromRecents="true"