Запуск Намерения от открытия уведомления в окне "картинка в картинке"
Я следил за документацией " картинка в картинке" на 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 в манифесте. Это должно исправить вашу проблему