Запуск Намерения от открытия уведомления в окне "картинка в картинке"

Я следил за документацией " картинка в картинке" на Android. То есть моя активность PiP отмечена android:launchMode="singleTask", android:resizeableActivity="true", а также android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" в манифесте.

Картинка в картинке, кажется, отлично работает. Тем не менее, я заметил случай, когда я испытываю нежелательное поведение.

Когда мое приложение получает толчок, я создаю PendingIntent с Intent за MyActivity (разные Activity чем PiP Activity). Тем не менее, когда я нажимаю на уведомление и Intent используется, MyActivity запускается внутри окна PiP!

Я пытался добавить android:launchMode="singleTask" в MyActivity в манифесте. Я также попытался добавить этот флаг программно в Intent перед использованием с PendingIntent.getActivity(), Кажется, это не решает проблему.

Может кто-нибудь сказать мне, как это предотвратить?

3 ответа

Решение

Чтобы решить эту проблему, мы должны установить уникальный taskAffinity для PiP Activity в манифесте. Это указывает на задачу, к которой принадлежит действие. Установка уникального значения для него разделяет задачу PiP Activity от твоего MainActivity,

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


----------------------До--------------------------- -------------------После------------------------

Прежде всего, как вы можете видеть в примерах кодов Google, не нужно делать режим запуска PIP Activity singleTask. Однако вам нужно переместить задачу запуска вперед, которая не находится в режиме PIP, чтобы отключить состояние PIP.

Позвонив по нижеуказанному фрагменту в onCreate() метод цели Activity который вызывается из уведомлений, вы можете добиться этого.

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;
        }
    }
}

---------------------- До --------------------------- ------------------- После ------------------------

Я тоже столкнулся с этой проблемой, и вы можете попробовать добавить "android:excludeFromRecents="true" в вашем манифесте MyPipActivity

Добавлять android:supportsPictureInPicture="false" MyActivity в манифесте. Это должно исправить вашу проблему

Другие вопросы по тегам