Запуск Намерения от открытия уведомления в окне "картинка в картинке" - PullRequest
0 голосов
/ 03 января 2019

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Прежде всего, как вы можете видеть в примерах кодов 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;
        }
    }
}

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

enter image description here enter image description here

0 голосов
/ 08 января 2019

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

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


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

enter image description here enter image description here

0 голосов
/ 03 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...