Picture-in-picture semble très bien fonctionner. Cependant, j'ai remarqué un cas où je rencontre un comportement indésirable.
Lorsque mon application reçoit un push, je crée un PendingIntent
avec un Intent
pour MyActivity
(autre Activity
que l ' activité
PiP). Cependant, lorsque je tape sur la notification et que Intent
est utilisé, MyActivity
se lance dans la fenêtre PiP!
J'ai essayé d'ajouter android: launchMode = "singleTask"
à MyActivity
dans le manifeste. J'ai également essayé d'ajouter cet indicateur par programme à Intent
avant de l'utiliser avec PendingIntent.getActivity ()
. Cela ne semble pas résoudre le problème.
Quelqu'un peut-il me dire comment éviter cela?
4 Réponses :
ajoutez android:supportsPictureInPicture="false"
à MyActivity dans le fichier manifeste. Cela devrait résoudre votre problème
Merci pour la réponse. J'ai ajouté android: supportsPictureInPicture = "false"
à toutes les activités (sauf mon activité PiP) et le problème persiste.
Tout d'abord, comme vous pouvez le voir dans exemples de codes google , il n'est pas nécessaire pour rendre le mode de lancement de PIP Activity
singleTask. Cependant, vous devez déplacer la tâche du lanceur vers l'avant qui n'est pas en mode PIP, afin de désactiver l'état PIP.
En appelant l'extrait de code ci-dessous dans la méthode onCreate ()
de la cible Activité
qui est appelée à partir des notifications, vous pouvez y parvenir.
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; } } }
------------------ ---- Avant -------------------------------------- -------- Après ------------------------
Si je comprends bien, il s'agit de prendre l'activité PiP et de la «maximiser». Ma situation implique le lancement d'une activité qui n'est PAS l'activité PiP. Donc, si MyPipActivity
s'exécute dans une fenêtre PiP et que j'ai un PendingIntent
pour une notification pour lancer MainActivity
, je veux MainActivity
pour lancer le plein écran (idéalement avec la fenêtre PiP exécutant MyPipActivity
toujours active) dans sa propre tâche. En ce moment, cliquer sur la notification lance MainActivity
dans la fenêtre PiP.
Pour résoudre ce problème, nous devons définir une taskAffinity
unique pour Activity
PiP dans le manifeste. Il indique la tâche à laquelle appartient l'activité. La définition d'une valeur unique pour cela sépare la tâche de Activity
PiP de votre MainActivity
.
<activity android:name=".VideoActivity" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" android:taskAffinity=".VideoActivity" android:supportsPictureInPicture="true" />
---------------------- Avant -------------------- -------------------------- Après ---------------- --------
Ça marche! Cependant, cela présente un nouveau problème. Lors du lancement de MyPipActivity
, l'animation est complètement différente et indésirable.
Ce problème se produit pour toutes les activités de tâche non root. Également lorsque l'activité a défini singleInstance
. Cependant, je n'ai pas trouvé de solution pour cela jusqu'à présent. Il est peut-être préférable de remplacer toutes les transitions d’activité nous-mêmes en utilisant quelque chose comme ça .
Merci pour votre réponse. J'ai exploré cette solution précédemment. Mon problème est que je ne peux pas référencer directement les animations système (par exemple: android.R.anim.xyz). Je pourrais copier le contenu de ces fichiers d'animation Android et utiliser mes propres animations personnalisées, mais cela s'arrête dès que certains OEM de l'appareil modifient les animations de commutation d'activité (ce que beaucoup semblent faire).
Tu es le bienvenu mec. Je serai très heureux si je sais comment vous résolvez ce problème. J'ai eu le même problème avec le mode singleInstance.
Si je trouve une solution, je vous le ferai savoir. Merci pour l'aide!
J'ai également rencontré ce problème et vous pouvez essayer d'ajouter "android: excludeFromRecents =" true "
dans votre manifeste MyPipActivity
Premièrement, pourriez-vous après avoir cliqué sur la notification, ouvrir une activité sans tête (sans mise en page) qui exécutera une autre activité?