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_OFFACTION_SCREEN_ON
Quand ACTION_SCREEN_OFF arrive :
- Flutter reçoit
screenInteractiveChanged=false. - La piste vidéo est désactivée avec
VideoTrack.no(), même sipip=true. - Le Player garde l'audio et la MediaSession.
- Le foreground service reste actif.
Quand l'écran revient :
- Flutter reçoit
screenInteractiveChanged=true. - Il attend 450 ms que la Surface Android revienne.
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.