56 lines
1.6 KiB
Markdown
56 lines
1.6 KiB
Markdown
# Correctif écran verrouillé lorsque le PiP est actif
|
|
|
|
Le log précédent montrait :
|
|
|
|
```text
|
|
[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 :
|
|
|
|
```text
|
|
[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.
|