Files
youtube_personal/ETAPE10_SCREEN_LOCK_PIP_TEST.md
T

1.6 KiB

Correctif écran verrouillé lorsque le PiP est actif

Le log précédent montrait :

[BACKGROUND] lifecycle=AppLifecycleState.hidden pip=true playing=true
[BACKGROUND] lifecycle=AppLifecycleState.paused pip=true playing=true
...
AudioTrack ... stop

Le problème était que le code interprétait pip=true comme « la vidéo est toujours visible » et refusait donc d'activer le mode audio-only.

Or, lors du verrouillage, Android peut conserver l'état PiP pendant que l'écran s'éteint et que la Surface vidéo disparaît.

Nouveau comportement

MainActivity.kt écoute maintenant directement :

  • ACTION_SCREEN_OFF
  • ACTION_SCREEN_ON

Quand ACTION_SCREEN_OFF arrive :

  1. Flutter reçoit screenInteractiveChanged=false.
  2. La piste vidéo est désactivée avec VideoTrack.no(), même si pip=true.
  3. Le Player garde l'audio et la MediaSession.
  4. Le foreground service reste actif.

Quand l'écran revient :

  1. Flutter reçoit screenInteractiveChanged=true.
  2. Il attend 450 ms que la Surface Android revienne.
  3. VideoTrack.auto() restaure l'image.

Test utile

Lance Android en debug, démarre une vidéo, passe éventuellement en PiP, puis verrouille le téléphone.

Cherche ces lignes :

[BACKGROUND] native screen interactive=false
[BACKGROUND] disable video track
[BACKGROUND] audio-only active

Si ensuite Android affiche malgré tout AudioTrack ... stop, cela voudra dire que media_kit arrête son moteur audio indépendamment de la piste vidéo. Dans ce cas, la prochaine étape sera de déplacer la lecture audio de fond dans un Player séparé géré par le service Android.